1. 程式人生 > >宿主機與docker容器之間免密碼ssh連結,容器與容器之間ssh免密碼連線

宿主機與docker容器之間免密碼ssh連結,容器與容器之間ssh免密碼連線

轉:https://segmentfault.com/a/1190000012484646

若要實現免密登陸,意味著無論是宿主機,還是容器都要彼此互動公鑰:

容器A傳送自身公鑰給中心機器,統一由中心機器,回發全部需要ssh到容器A的公鑰資訊,任何一個新加入的容器,傳送資訊給中心機器,則中心機器通知全部的容器更新附加對應的公鑰資訊,如此實現中心機器到全部容器,容器之間的彼此免ssh登陸

一、SSH簡介

SSH(Secure Shell)是一種通訊加密協議,加密演算法包括:RSA、DSA等。

  1. RSA:非對稱加密演算法,其安全性基於極其困難的大整數的分解(兩個素數的乘積);
  2. 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