這篇文章幾乎是對的翻譯,謝謝該作者。
使用SSH登陸、執行指令到遠端機器需要輸入密碼,很多系統需要免輸密碼通路遠端機器,比如hadoop主節點通路子節點時,這時可以使用ssh-copy-id指令将公鑰拷貝到遠端機器上,
比如:
ssh-copy-id -i
但如過面臨很多機器,比如5,6,7,8台以上,一般會想到寫個腳本,批量執行,但ssh-copy-id指令執行過程中有兩處需要人工參與,
一是當你看到如下提問時,必須對每台機器回答yes
or no,
The authenticity of host ‘myfirsthost.work.cainmanor.com
(10.256.33.106)‘ can‘t be established.
RSA key fingerprint
is fc:40:7c:de:b8:ac:a2:f5:d4:11:d0:0e:b2:77:8a:63.
Are you
sure you want to continue connecting (yes/no)?
yes
二是每台機器的密碼,當你ssh-copy-id到每台機器時,需要輸入通路這台機器的密碼,
為了解決第一個問題,可以修改~/.ssh/config檔案(沒有則建立),把下面兩行增加到該檔案中,
StrictHostKeyChecking
no
UserKnownHostsFile=/dev/null
在完成所有SSH拷貝動作後,記得用#号鍵注釋掉(不注釋也沒事。。。)。
為了解決第二個問題,可以使用sshpass工具,該工具可能需要下載下傳,我在Centos上需要手動下載下傳rpm包安裝。sshpass為ssh提供所需的密碼,可以執行如下指令,
sshpass
-p ‘PASSWORD‘ ssh-copy-id
hduser@host
實際操作時,會把上面這條指令放到像下面這樣的腳本檔案裡,并提供hosts檔案,hosts檔案記錄所有需要拷貝公鑰的機器,
for
X in `cat hosts`
do
sshpass -p
‘PASSWORD‘ ssh-copy-id
hduser@${X}
done
hosts檔案記錄host資訊這種模式在批量執行ssh指令很常見。
在完成SSH公鑰拷貝後,可以選擇pssh工具批量執行指令。