這篇文章幾乎是對Push SSH public keys to multiple host的翻譯,謝謝該做者。
使用SSH登錄、執行命令到遠程機器須要輸入密碼,不少系統須要免輸密碼訪問遠程機器,好比hadoop主節點訪問子節點時,這時能夠使用ssh-copy-id命令將公鑰拷貝到遠程機器上,
好比: ssh-copy-id -i hduser@192.168.7.70
但如過面臨不少機器,好比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工具批量執行命令。ssh