作成者はsshパスワードなしのログインを構成するために使用しました。基本的に、2つの手順で十分です。ssh-keygenはキーペアを削除し、ssh-copy-id公開キーはリモートホストにコピーされ、キーペアの展開が完了します。
しかし、作者は、サーバーグループでsshをパスワードなしで設定する方法を考えていますか?キーペアを生成し、ssh-copy-idを使用して公開キーを複数回配布しますか?それは非効率的すぎるでしょう。そこで、ssh-copy-idを使用して公開鍵をループで配布し、それを解決することを考えました。この機能を実現するためのスクリプトをインターネット上で見つけました。次のように:
#!/bin/bash
yum -y install sshpass &> /dev/null
UserName= username
IPlist=(10.0.0.2 10.0.0.3 10.0.0.4 10.0.0.5 )
#创建密钥对
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P "" &>/dev/null
#分发公钥
for i in ${IPlist[*]}
do
sshpass -p "123456" ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 -o StrictHostKeyChecking=no $UserName@$i &>/dev/null
done
最初のsshログインでは、確認するためにyesまたはnoを入力する必要があります。最初の接続で確認しないようにするには、StrictHostKeyChecking=noを設定します。さらに、expectツールがあります。詳細については、著者の以前の記事であるLinuxのexpectツールを参照してリモートインタラクティブ通信を完了してください。したがって、変更されたスクリプトは次のようになりますが、条件が限られているためテストされていません。
#!/bin/bash
yum -y install expect &> /dev/null
UserName= username
passwd='password'
#服务器集群IP地址
IPlist=(10.0.0.2 10.0.0.3 10.0.0.4 10.0.0.5)
#创建密钥对,需要确定路径与密码(空),不然需要交互式
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P "" &>/dev/null
#循环分发公钥
#也可以定义文件从文件中读取
#for i in `cat /home/pi/HOSTid`
for i in ${IPlist[*]}
do
/usr/bin/expect <<-EOF
set time 10
spawn ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 -o StrictHostKeyChecking=no $UserName@$i &>/dev/null
expect {
"*yes/no" { send "yes\r"; exp_continue }
"*password:" { send "$passwd\r" }
}
expect eof
EOF
done
管理ホストでこのスクリプトを実行すると、うまくいきます。ただし、sshパスワードなしのサーバーグループをペアで構成する場合、作成者は、すべてのサーバーIPアドレスをHOSTidに書き込んでから、scpを使用して各サーバーに配布できると考えています。上記のスクリプトはHOSTidを読み取りますが、それがローカルIPアドレスであるかどうかを判断するには、forループに条件を追加する必要があります。追加する場合は、次のループにジャンプし続けます。例えば:
f [ $i = `ifconfig enp0s3 | head -n2 | grep inet | awk '{print$2}'` ]
then
echo " This local machine !!!"
continue;
fi
ネットワークカードの名前を正しく記述する必要があります。作成者のcentosはenp0s3です。もちろん、ifconfigツールも使用する必要があります。
このスクリプトは各サーバーで実行する必要があり、作成者はこのスクリプトにallssh_key.shという名前を付けました。その後、最適化を続けることができます。著者の前回の記事「Linuxでツールを使用してリモート対話型通信を完了することを期待する(2)」のauto_cmd.shを使用できます(スクリプトは、allssh_key.shを直接実行するようにローカルマシンを変更する必要がありますスクリプト)サーバーを完成させます。群れのキーペアの展開。
./auto_cmd.sh /home/username/shell/allssh_key.sh
参照リンク:
LAN内のサーバーファーム用にパスワードなしでsshを設定する
https://www.jianshu.com/p/c90cfa599e74