天天看點

拷貝ssh公鑰到多台伺服器上

這篇文章幾乎是對的翻譯,謝謝該作者。

使用SSH登陸、執行指令到遠端機器需要輸入密碼,很多系統需要免輸密碼通路遠端機器,比如hadoop主節點通路子節點時,這時可以使用ssh-copy-id指令将公鑰拷貝到遠端機器上,

比如:

ssh-copy-id -i

[email protected]

但如過面臨很多機器,比如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工具批量執行指令。