SSH公開鍵を複数のLinuxホストにコピーする

SSH公開鍵を複数のLinuxホストにコピーする

中央サーバーから複数のサーバーに.ssh/id_rsa.pubをコピーしようとしています。通常、変更を他のサーバーにプッシュするために使用する次のスクリプトがあります。

#!/bin/bash


for ip in $(<IPs); do
    # Tell the remote server to start bash, but since its
    # standard input is not a TTY it will start bash in
    # noninteractive mode.
    ssh -q "$ip" bash <<-'EOF'



EOF

done

ただし、この場合はローカルサーバーから公開鍵をインポートしてから、複数のサーバーに追加する必要があります。上記の文書化されたスクリプトを使用して次のことを行う方法はありますか?

cat .ssh/id_rsa.pub |ssh [email protected] 'cat > .ssh/authorized_keys'

答え1

この単純なループを使用すると、すべてのリモートサーバーに自動化および伝播できます。

#!/bin/bash
for ip in `cat /home/list_of_servers`; do
    ssh-copy-id -i ~/.ssh/id_rsa.pub $ip
done

答え2

以下は、毎回パスワードを要求せずにssh-keygenを複数のサーバーにコピーするための簡単なスクリプトです。

for server in `cat server.txt`;  
do  
    sshpass -p "password" ssh-copy-id -i ~/.ssh/id_rsa.pub user@$server  
done

これが必要ですSSHパス、パッケージまたはソースとは別にインストールする必要があります。

答え3

他の人の公開鍵を複数のコンピュータにコピーする必要がある場合、許可された回答は機能しません。だから私は次の解決策を思いついた。

cat add-vassal-tc-agents.sh

#!/bin/bash
set -x # enable bash debug mode
if [ -s vassal-public-key.pub ]; then # if file exists and not empty
    for ip in `cat tc-agents-list.txt`; do # for each line from the file
        # add EOL to the end of the file (i.e., after the last line)
        # and echo it into ssh, where it is added to the authorized_keys
        sed -e '$s/$/\n/' -s vassal-public-key.pub | ssh "$ip" 'cat >> ~/.ssh/authorized_keys'
    done
else
    echo "Put new vassal public key into ./vassal-public-key.pub to add it to tc-agents-list.txt hosts"
fi

このスクリプトは、実行中の環境にアクセス権がある場合は、コンピューターのリスト内のユーザーに新しいキーを追加します。

tc-agents-list.txt:

[email protected]
[email protected]
[email protected]
[email protected]

注:これにはGNU sedを使用する必要があります。質問に「Linux」と書かれているので、GNU sedがある可能性が高いです。

答え4

次のように、単純なwhileループと組み込みサーバーのリストを使用してこれを実行できます。

while read SERVER
do
    ssh-copy-id user@"${SERVER}"
done <<\EOF
server1
server2
server3
EOF

リストをスクリプトに配置すると、失われる可能性がある別のデータファイルが削除されます。

関連情報