宿主機與docker容器之間免密碼ssh連結,容器與容器之間ssh免密碼連線
轉:https://segmentfault.com/a/1190000012484646
若要實現免密登陸,意味著無論是宿主機,還是容器都要彼此互動公鑰:
容器A傳送自身公鑰給中心機器,統一由中心機器,回發全部需要ssh到容器A的公鑰資訊,任何一個新加入的容器,傳送資訊給中心機器,則中心機器通知全部的容器更新附加對應的公鑰資訊,如此實現中心機器到全部容器,容器之間的彼此免ssh登陸
一、SSH簡介
SSH(Secure Shell)是一種通訊加密協議,加密演算法包括:RSA、DSA等。
- RSA:非對稱加密演算法,其安全性基於極其困難的大整數的分解(兩個素數的乘積);
- DSA:也是非對稱加密演算法,其安全性基於整數有限域離散對數難題;
二、SSH免密登陸原理
三、SSH免密登陸
伺服器環境:
機器 | 使用者名稱 | 密碼 |
---|---|---|
master | hadoop | hadoop |
slave1 | hadoop | hadoop |
slave2 | hadoop | hadoop |
1、生成金鑰
分別在master、slave1、slave2機器的使用者家目錄(/home/hadoop/)下,執行下列命令,通過RSA演算法進行加密,提示輸入的話可直接回車不輸入任何內容:
ssh-keygen -t rsa
將會在家目錄下的隱藏目錄/.ssh
下生成檔案:
id_rsa.pub //公鑰
id_rsa //金鑰
2、追加公鑰
在master機器上,將id_rsa.pub
的內容寫入authorized_keys
檔案中
cat id_rsa.pub >> authorized_keys
3、傳送其他伺服器公鑰
在slave1機器上,將id_rsa.pub
複製到master機器的/.ssh
目錄下,並重新命名位id_rsa.pub.slave1
:
scp id_rsa.pub [email protected]:/home/hadoop/.ssh/id_rsa.pub.slave1
在slave2機器上,將id_rsa.pub
複製到master機器的/.ssh
目錄下,並重新命名位id_rsa.pub.slave2
:
scp id_rsa.pub [email protected]:/home/hadoop/.ssh/id_rsa.pub.slave2
4、追加其他伺服器公鑰
在master機器上,在/.ssh
目錄下將看到從slave1、slave2傳送過來的檔案:
id_rsa.pub.slave1
id_rsa.pub.slave2
將這兩個公鑰內容追加寫入到master機器/.ssh
目錄下的authorized_keys
中:
cat id_rsa.pub.slave1 >> authorized_keys
cat id_rsa.pub.slave2 >> authorized_keys
5、確認公鑰內容
在master機器上,檢視authorized_keys
檔案內容,確認包含slave1、slave2機器的兩個公鑰內容:
cat authorized_keys
6、傳送authorized_keys
在master機器上,將authorized_keys
傳送到slave1、slave2機器的/.ssh
目錄下:
scp authorized_keys [email protected]:/home/hadoop/.ssh/
scp authorized_keys [email protected]:/home/hadoop/.ssh/
7、修改authorized_keys檔案許可權
分別在master、slave1、slave2機器上執行,對auhorized_keys
進行許可權修改,否則將無法實現免密碼登入:
chmod 600 authorized_keys
8、SSH登陸測試
在master機器上,從master機器通過ssh登入到slave1,第一次需要密碼,退出後以後登入就不需要密碼了,其他機器類似操作:
//登陸slave1
ssh slave1
//登陸後退出
exit
//重新登陸
ssh slave1