對於須要遠程管理其它機器,通常使用遠程桌面或者telnet。linux通常只能是telnet。可是telnet的缺點是通訊不加密,存在不安全因素,只適合內網訪問。爲解決這個問題,推出了通訊加密通訊協議,即SSH(Secure Shell)。使用非對稱加密方式,傳輸內容使用rsa或者dsa加密,能夠避免網絡竊聽。linux
SSH(Secure Shell)是一種通訊加密協議,加密算法包括:RSA、DSA等。算法
RSA 與 DSA 都是非對稱加密算法。其中RSA的安全性是基於極其困難的大整數的分解(兩個素數的乘積);DSA 的安全性是基於整數有限域離散對數難題。基本上能夠認爲相同密鑰長度的 RSA 算法與 DSA 算法安全性至關。 有點要注意,RSA 的安全性依賴於大數分解,可是否等同於大數分解一直未能獲得理論上的證實,由於沒有證實破解 RSA 就必定須要做大數分解。不過也沒必要太過擔憂,RSA 從誕生以來,經歷了各類攻擊,至今未被徹底攻破(依靠暴力破解,小於1024位密鑰長度的 RSA 有被攻破的記錄,但未從算法上被攻破)
DSA 只能用於數字簽名,而沒法用於加密(某些擴展能夠支持加密);RSA 便可做爲數字簽名,也能夠做爲加密算法。不過做爲加密使用的 RSA 有着隨密鑰長度增長,性能急劇降低的問題。
相同密鑰長度下,DSA 作簽名時速度更快,但作簽名驗證時速度較慢,通常狀況驗證簽名的次數多於簽名的次數。 相同密鑰長度下,DSA (在擴展支持下)解密密文更快,而加密更慢;RSA 正好反過來,通常來講解密次數多於加密次數。不過因爲非對稱加密算法的先天性能問題,二者都不是加密的好選擇。
圖解,server A免登陸到server B: 1.在A上生成公鑰私鑰。安全
2.將公鑰拷貝給server B,要重命名成authorized_keys(從英文名就知道含義了)服務器
3.Server A向Server B發送一個鏈接請求。網絡
4.Server B獲得Server A的信息後,在authorized_key中查找,若是有相應的用戶名和IP,則隨機生成一個字符串,並用Server A的公鑰加密,發送給Server A。less
5.Server A獲得Server B發來的消息後,使用私鑰進行解密,而後將解密後的字符串發送給Server B。Server B進行和生成的對比,若是一致,則容許免登陸。ssh
總之:A要免密碼登陸到B,B首先要擁有A的公鑰,而後B要作一次加密驗證。對於非對稱加密,公鑰加密的密文不能公鑰解開,只能私鑰解開。oop
配置ssh免密碼登陸(三個節點master、slave一、slave2)性能
生成密鑰測試
在master
機器的宿主目錄下執行命令生成密鑰
ssh-keygen -t rsa 或 ssh-keygen -t rsa -P ''
-P表示密碼,-P '' 就表示空密碼,也能夠不用-P參數,這樣就要三車回車,用-P就一次回車
(使用rsa加密方式生成密鑰)回車後,會提示三次輸入信息,咱們直接回車便可。
將會在家目錄下的隱藏目錄/.ssh下生成文件:
id_rsa.pub //公鑰 id_rsa //密鑰
追加公鑰
在master機器上,將id_rsa.pub的內容寫入authorized_keys
文件中
cat id_rsa.pub >> authorized_keys
生成密鑰
以 master 一樣的方式, slave1, slav2 生產密鑰。
在slave1機器上,將id_rsa.pub複製到master機器的/.ssh目錄下,並從新命名位 id_rsa.pub.slave1:
scp id_rsa.pub hadoop@master:/home/hadoop/.ssh/id_rsa.pub.slave1
複製文件的時候,因爲尚未免密碼登陸的,因此要輸入密碼
在slave2機器上,將id_rsa.pub複製到master機器的/.ssh目錄下,並從新命名位id_rsa.pub.slave2 :
scp id_rsa.pub hadoop@master:/home/hadoop/.ssh/id_rsa.pub.slave2
複製文件的時候,因爲尚未免密碼登陸的,因此要輸入密碼
在master機器上,在/.ssh目錄下將看到從slave一、slave2發送過來的文件:
id_rsa.pub.slave1 id_rsa.pub.slave2
將這兩個公鑰內容追加寫入到master機器/.ssh
目錄下的authorized_keys
中:
在master機器上,查看authorized_keys文件內容,確認包含slave一、slave2機器的兩個公鑰內容:
cat authorized_keys
master機器上,將authorized_keys發送到slave一、slave2機器的/.ssh目錄下:
scp authorized_keys hadoop@slave1:/home/hadoop/.ssh/ scp authorized_keys hadoop@slave2:/home/hadoop/.ssh/
複製文件的時候,因爲尚未免密碼登陸的,因此要輸入密碼
分別在master、slave一、slave2機器上執行,對auhorized_keys進行權限修改,不然將沒法實現免密碼登陸:
chmod 600 authorized_keys
authorized_keys的權限要是600。文件和目錄的權限千萬別設置成chmod 777.這個權限太大了,不安全,數字簽名也不支持。
在master機器上,從master機器經過ssh登陸到slave1,第一次須要密碼,退出後之後登陸就不須要密碼了,其餘機器相似操做:
//登錄slave1 ssh slave1 //登錄後退出 exit //從新登錄 ssh slave1 便可直接登陸
一、權限問題
.ssh目錄,以及/home/當前用戶 須要700權限,參考如下操做調整 sudo chmod 700 ~/.ssh sudo chmod 700 /home/當前用戶 .ssh目錄下的authorized_keys文件須要600或644權限,參考如下操做調整 sudo chmod 600 ~/.ssh/authorized_keys
二、StrictModes問題
編輯 sudo vi /etc/ssh/sshd_config 找到 #StrictModes yes 改爲 StrictModes no 若是還不行,能夠用ssh -vvv 目標機器ip 查看詳情,根據輸出內容具體問題具體分析了 ssh -v debug
若是但願ssh公鑰生效需知足至少下面兩個條件:
查看ssh的登陸日誌
less /var/log/secure