什麼是SSH?
傳統的網絡服務程序,如FTP、Pop和Telnet在傳輸機制和實現原理上是沒有考慮安全機制的,其本質上都是不安全的;因爲它們在網絡上用明文傳送數據、用戶帳號和用戶口令,別有用心的人通過竊聽等網絡攻擊手段非常容易地就可以截獲這些數據、用戶帳號和用戶口令。而且,這些網絡服務程序的簡單安全驗證方式也有其弱點,那就是很容易受到"中間人"(man-in-the-middle)這種攻擊方式的攻擊。所謂"中間人"的攻擊方式,就是"中間人"冒充真正的服務器接收你的傳給服務器的數據,然後再冒充你把數據傳給真正的服務器。服務器和你之間的數據傳送被"中間人"一轉手做了手腳之後,就會出現很嚴重的問題。
SSH是英文Secure Shell的簡寫形式。通過使用SSH,你可以把所有傳輸的數據進行加密,這樣"中間人"這種攻擊方式就不可能實現了,而且也能夠防止DNS欺騙和IP欺騙。使用SSH,還有一個額外的好處就是傳輸的數據是經過壓縮的,所以可以加快傳輸的速度。
SSH登錄時有兩種驗證方法
- 第一種:
基於密碼的安全驗證,它要求用戶在每次登錄服務器時輸入密碼,服務器端驗證通過後即登錄成功。 - 第二種:
基於密鑰的安全驗證,客戶端的公鑰會預先保存在服務器端,當登錄時,服務器端會使用該公鑰做驗證,如果驗證成功,用戶不需輸入密碼即完成登錄。爲了避免每次都輸入密碼這種重複性工作,我們選擇第二種方式進行遠程登錄
SSH的原理
Linux中實現Hadoop各節點間的SSH免密登錄
實驗節點爲4個:
master1 | master2 | slave1 | slave2 |
---|---|---|---|
主節點1 | 主節點2 | 從節點1 | 從節點2 |
1.各節點生成公鑰祕鑰對
四個節點都要做一遍,中間一路回車,生成的公鑰祕鑰會在 /root/.ssh/ 路徑下
[root@master1 ~]# ssh-keygen -t rsa
2.進入master1節點的 /root/.ssh/ 目錄下
將master1公鑰拷貝一份,命名爲 authorized_keys
[root@master1 ~]# cd .ssh/
[root@master1 .ssh]# cp id_rsa.pub authorized_keys
[root@master1 .ssh]# cat authorized_keys
此時,公鑰已經保存在authorized_keys文件中了
3.將authorized_keys 複製到master2上
用 scp 命令複製 authorized_keys 到master2 的 /root/.ssh/目錄下,中間需要確認輸入密碼
[root@master1 .ssh]# scp authorized_keys master2:/root/.ssh/
4.切換至master2節點,將master2公鑰保存在authorized_keys中
進入master2的 /root/.ssh/ 目錄下,因爲 authorized_keys 已經複製到msater2的/root/.ssh/目錄下,所以,用cat追加內容至authorized_keys文件即可
[root@master2 ~]# cd .ssh/
[root@master2 .ssh]# cat id_rsa.pub >> authorized_keys
master2的公鑰就保存在authorized_keys文件中了
5.重複第4步,將slave1、slave2節點的公鑰保存至authorized_keys中
6.將slave2中的公鑰保存至authorized_keys中後
將slave2中authorized_keys拷貝複製到master1、master2、slave1節點的/root/.ssh/目錄下
[root@slave2 .ssh]# scp authorized_keys master1:/root/.ssh/
[root@slave2 .ssh]# scp authorized_keys master2:/root/.ssh/
[root@slave2 .ssh]# scp authorized_keys slave1:/root/.ssh/
7.至此,SSH免密登錄完成
[root@master1 ~]# ssh master2