今天看了一位大神的ssh密鑰分髮腳本,其中他shell指令碼裡有一條ssh-copy-id -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa.pub root@$ip,我執行後,報/usr/bin/ssh-copy-id: ERROR: No identities found,然後網上找了下-o StrictHostKeyChecking=no這項的含義,原來是強制不檢查key,但ssh-copy-id我這裡是不能使用的,所以最後我只能把-o StrictHostKeyChecking=no給去掉.
原來的指令碼:
| 代碼如下 |
複製代碼 |
#!/bin/sh read -p "輸入遠端伺服器IP: " ip ssh-copy-id -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa.pub root@$ip ssh root@$ip 'sed -i "s/^#RSAAuthentication yes/RSAAuthentication yes/g" /etc/ssh/sshd_config' ssh root@$ip 'sed -i "s/^#PubkeyAuthentication yes/PubkeyAuthentication yes/g" /etc/ssh/sshd_config' ssh root@$ip 'sed -i "s/^#PermitRootLogin yes/PermitRootLogin yes/g" /etc/ssh/sshd_config' ssh root@$ip 'service sshd restart' hostname=`ssh root@${ip} 'hostname'` echo "添加主機名稱和IP到本地/etc/hosts檔案中" echo "$ip $hostname" >> /etc/hosts echo "遠端主機主機名稱為$hostname, 請查看 /etc/hosts 確保該主機名稱和IP添加到主機列表檔案中" |
修改後的指令碼:
| 代碼如下 |
複製代碼 |
#!/bin/sh read -p "輸入遠端伺服器IP: " ip ssh-copy-id -i ~/.ssh/id_rsa.pub root@$ip ssh root@$ip 'sed -i "s/^#RSAAuthentication yes/RSAAuthentication yes/g" /etc/ssh/sshd_config' ssh root@$ip 'sed -i "s/^#PubkeyAuthentication yes/PubkeyAuthentication yes/g" /etc/ssh/sshd_config' ssh root@$ip 'sed -i "s/^#PermitRootLogin yes/PermitRootLogin yes/g" /etc/ssh/sshd_config' ssh root@$ip 'service sshd restart' hostname=`ssh root@${ip} 'hostname'` echo "添加主機名稱和IP到本地/etc/hosts檔案中" echo "$ip $hostname" >> /etc/hosts echo "遠端主機主機名稱為$hostname, 請查看 /etc/hosts 確保該主機名稱和IP添加到主機列表檔案中" |
這樣的話就不會再報/usr/bin/ssh-copy-id: ERROR: No identities found錯誤了.
ssh密鑰分髮腳本
首先是產生ssh key指令碼
| 代碼如下 |
複製代碼 |
#!/bin/sh ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys |
ssh-keygen一般來說需要輸入passphrase,但是一般都是三個斷行符號過去了,我懶的輸入,加上-P ''就不用了。
然後是添加公開金鑰到從節點的指令碼
| 代碼如下 |
複製代碼 |
#!/bin/sh read -p "輸入遠端伺服器IP: " ip ssh-copy-id -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa.pub root@$ip ssh root@$ip 'sed -i "s/^#RSAAuthentication yes/RSAAuthentication yes/g" /etc/ssh/sshd_config' ssh root@$ip 'sed -i "s/^#PubkeyAuthentication yes/PubkeyAuthentication yes/g" /etc/ssh/sshd_config' ssh root@$ip 'sed -i "s/^#PermitRootLogin yes/PermitRootLogin yes/g" /etc/ssh/sshd_config' ssh root@$ip 'service sshd restart' hostname=`ssh root@${ip} 'hostname'` echo "添加主機名稱和IP到本地/etc/hosts檔案中" echo "$ip $hostname" >> /etc/hosts echo "遠端主機主機名稱為$hostname, 請查看 /etc/hosts 確保該主機名稱和IP添加到主機列表檔案中" echo "主機公開金鑰複製完成" |
然後是第三個指令碼讀取主機列表然後把/etc/hosts複製到所有主機上
| 代碼如下 |
複製代碼 |
#!/bin/sh cat /etc/hosts | while read LINE do ip=`echo $LINE | awk '{print $1}' | grep -v "::" | grep -v "127.0.0.1"` echo "Copying /etc/hosts to ${ip}" scp -o StrictHostKeyChecking=no /etc/hosts root@${ip}:/etc/ done |
參考:
http://blog.slogra.com 與51cto.com