SSH免密登錄詳解
SSH(Security Shell)安全外殼協(xié)議线罕,是較為可靠的,專(zhuān)為遠(yuǎn)程登錄會(huì)話(huà)和其他網(wǎng)絡(luò)服務(wù)提供安全保證的協(xié)議店雅。
? 對(duì)于傳統(tǒng)的網(wǎng)絡(luò)服務(wù)程序(例如面褐,F(xiàn)TP,Telnet等)來(lái)說(shuō)太援,其本質(zhì)上并不是安全的,主要原因在于扳碍,這些網(wǎng)絡(luò)應(yīng)用程序在網(wǎng)絡(luò)上都是直接使用明文傳輸口令和數(shù)據(jù)的提岔,對(duì)于別有用心的人來(lái)說(shuō),這些口令和數(shù)據(jù)是很容易被截獲的笋敞。另外碱蒙,這些網(wǎng)絡(luò)服務(wù)程序的安全驗(yàn)證方式也是存在弱點(diǎn)的,非常容易受到中間人(Man-In-The-Middle)這種方式的攻擊夯巷,簡(jiǎn)而言之赛惩,就是中間人冒充真正的服務(wù)器接收你傳輸?shù)臄?shù)據(jù),然后趁餐,再將數(shù)據(jù)轉(zhuǎn)發(fā)給真正的服務(wù)器喷兼,通過(guò)這種方式中間人就可以神不知鬼不覺(jué)地拿到你所有數(shù)據(jù)。
? 通過(guò)使用SSH后雷,則可以將所有傳輸?shù)臄?shù)據(jù)及口令進(jìn)行加密季惯,從而防止中間人攻擊吠各,還可以防止DNS和IP欺騙,另外星瘾,使用SSH還有加快傳輸速度的好處走孽,原因在于惧辈,SSH是可以對(duì)數(shù)據(jù)進(jìn)行壓縮的琳状。
SSH安裝詳解
SSH是安全外殼協(xié)議,而open-ssh
則是SSH的開(kāi)源實(shí)現(xiàn)盒齿,CentOS通常是默認(rèn)安裝了open-ssh
的念逞。
整個(gè)SSH服務(wù)是包含SSH服務(wù)端(openssh-server
)和SSH客戶(hù)端(openssh-clients
)的,常用的ssh命令就是客戶(hù)端一部分边翁。
SSH服務(wù)端與SSH客戶(hù)端之間的關(guān)系:節(jié)點(diǎn)A想要控制節(jié)點(diǎn)B翎承,則節(jié)點(diǎn)A上需要安裝SSH客戶(hù)端,而節(jié)點(diǎn)B上需要安裝相應(yīng)的SSH服務(wù)端符匾,這樣叨咖,節(jié)點(diǎn)A才能向節(jié)點(diǎn)B發(fā)送控制命令和數(shù)據(jù)。
# 安裝openssh-server
[root@cos1 ~]# yum install -y openssh-server
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.ustc.edu.cn
* extras: mirrors.ustc.edu.cn
* updates: mirrors.ustc.edu.cn
Package openssh-server-7.4p1-21.el7.x86_64 already installed and latest version
# 啟動(dòng)openssh-server
[root@cos1 ~]# systemctl start sshd.service
# 安裝openssh-clients
[root@cos1 ~]# yum install -y openssh-clients
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.ustc.edu.cn
* extras: mirrors.ustc.edu.cn
* updates: mirrors.ustc.edu.cn
Package openssh-clients-7.4p1-21.el7.x86_64 already installed and latest version
openssh
服務(wù)的主配置文件路徑:/etc/ssh/sshd_config
啊胶。
# SSH-Server常見(jiàn)的配置項(xiàng)
# 如果SSH連接提示端口不可用甸各,可以在改文件中查看SSH端口,端口沒(méi)問(wèn)題焰坪,就要考慮SSH服務(wù)是否正常啟動(dòng)了
# SSH客戶(hù)端與服務(wù)端連接的默認(rèn)端口號(hào)
Port 22
默認(rèn)情況下趣倾,SSH服務(wù)提供了以下兩個(gè)非常有用的功能:
1、類(lèi)似Telnet遠(yuǎn)程連接服務(wù)器功能某饰,即SSH服務(wù)(安全可靠的遠(yuǎn)程登錄會(huì)話(huà)服務(wù))
# 遠(yuǎn)程連接服務(wù)
ssh user@hostname/ip
2儒恋、類(lèi)似FTP的sftp-server
服務(wù),借助SSH協(xié)議來(lái)傳輸數(shù)據(jù)黔漂,提供更安全的SFTP
服務(wù)(vsftp, proftp
).
# 文件拷貝服務(wù)
scp files user@hostname:/path/
SSH免密登錄配置
? 對(duì)于分布式環(huán)境組件(例如诫尽,Hadoop,HBase等)來(lái)說(shuō)炬守,組件的主/從節(jié)點(diǎn)通常需要遠(yuǎn)程登錄到集群中其他節(jié)點(diǎn)并執(zhí)行Shell命令牧嫉,如果不使用SSH,則集群安全就無(wú)法保證劳较,使用SSH服務(wù)的話(huà)驹止,又需要用戶(hù)輸入目標(biāo)服務(wù)器的免密,而主/從節(jié)點(diǎn)何時(shí)訪問(wèn)其他節(jié)點(diǎn)是不可控的观蜗,而且臊恋,頻繁的需要用戶(hù)輸入密碼也是不可行的,這時(shí)候墓捻,免密登錄就非常重要的抖仅。
主機(jī)A通過(guò)SSH實(shí)現(xiàn)免密登錄主機(jī)B所需的配置過(guò)程大致可以分為以下兩步:
1坊夫、主機(jī)A在本地通過(guò)加密算法生成公鑰和私鑰
通過(guò)rsa
算法生成公鑰和私鑰key對(duì),默認(rèn)情況下撤卢,身份驗(yàn)證信息(也就是私鑰)保存在/user/.ssh/id_rsa
文件下环凿,而公鑰信息則保存在/user/.ssh/id_rsa.pub
文件中。
[root@cos1 .ssh]# pwd
/root/.ssh
[root@cos1 .ssh]# ll
total 8
-rw-------. 1 root root 1679 Jun 22 00:04 id_rsa
-rw-r--r--. 1 root root 391 Jun 22 00:04 id_rsa.pub
2放吩、將主機(jī)A的公鑰拷貝到主機(jī)B的授權(quán)文件(authorized_keys
)中
# 通過(guò)ssh-copy-id命令將本地服務(wù)器公鑰上傳到指定服務(wù)器
[root@cos1 ~]# ssh-copy-id root@cos
... ... ... ... ... ...
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@cos'"
and check to make sure that only the key(s) you wanted were added.
# 現(xiàn)在智听,可以通過(guò)ssh root@cos訪問(wèn)主機(jī)cos了
[root@cos1 ~]# ssh root@cos
Last login: Thu Jun 18 06:38:25 2020 from 192.168.58.1
[root@cos ~]#
為了安全起見(jiàn),通常將保存具體哪些主機(jī)可以免密訪問(wèn)當(dāng)前主機(jī)的授權(quán)文件authorized_keys
文件設(shè)置為及root具有查看和修改的權(quán)限渡紫,用戶(hù)組及其他人無(wú)權(quán)訪問(wèn)到推。
通過(guò)ssh-copy-id
將主機(jī)A的公鑰拷貝到主機(jī)B之后,本質(zhì)上惕澎,是在主機(jī)B的授權(quán)文件中添加了主機(jī)A的公鑰莉测。
[root@cos .ssh]# ll
total 8
-rw-------. 1 root root 781 Jun 22 00:16 authorized_keys
-rw-r--r--. 1 root root 176 Jun 18 07:34 known_hosts
注意:
1、免密登錄唧喉,是用戶(hù)對(duì)用戶(hù)的捣卤,切換為其他用戶(hù)時(shí),仍需要輸入密碼
2八孝、免密登錄是單向的董朝,也就是說(shuō),主機(jī)A將公鑰拷貝到主機(jī)B后唆阿,主機(jī)A可以免密登錄主機(jī)A益涧,而主機(jī)B登錄主機(jī)A時(shí)仍然需要輸入密碼
圖解SSH免密登錄原理
通過(guò)上面一頓操作,主機(jī)A就可以免密登錄到主機(jī)A了驯鳖,感覺(jué)有點(diǎn)神奇闲询,那么,免密登錄到底是怎么實(shí)現(xiàn)的呢浅辙?也就是說(shuō)扭弧,SSH協(xié)議又到底是什么樣子呢?且看下圖分解~
上圖便是整個(gè)SSH免密登錄的配置及原理圖:
1记舆、ServerA生成公鑰并上傳到ServerB上
2鸽捻、Step 1: ServerA發(fā)送鏈接請(qǐng)求到ServerB
3、Step 2: ServerB在authorized_key中檢索ServerA的公鑰泽腮,隨機(jī)生成字符串御蒲,隨后利用公鑰對(duì)字符串進(jìn)行加密,并發(fā)送給ServerA
4诊赊、Step 3: ServerA接收到密文后厚满,利用私鑰進(jìn)行解密,并將內(nèi)容以明文的形式發(fā)送給ServerB