LAN内のサーバーファーム用にパスワードなしでsshを設定する

作成者は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

おすすめ

転載: blog.csdn.net/qq_40907977/article/details/120414771