web-dev-qa-db-ja.com

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してから、それを複数のサーバーに追加する必要があります。上記のここのドキュメントスクリプトを使用して以下を実行する方法はありますか?.

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

この単純なループを使用すると、ループを自動化して、すべてのリモートサーバーに展開できます。

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

毎回パスワードを要求せずにssh-keygenを複数のサーバーにコピーする簡単なスクリプトを次に示します。

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

他の誰かの公開鍵を複数のマシンに置く必要がある場合、受け入れられた回答は機能しません。だから、私は次の解決策を考え出しました:

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 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]
3
Ilya Sheershoff

公開鍵をコピーするために、openssh自体に何かが組み込まれています。したがって、catsshの代わりに、これを使用します:-

ssh-copy-id -i ~/.ssh/id_rsa.pub YOUR-REMOTE-Host
2
beginer

サーバーのIPリスト、名前SERVERを含むファイルがあり、サーバーのIPアドレスのみが定義されていると仮定します。

このforループも機能します。

for user in $(awk '{print $1}' SERVER | awk '{printf "user1@""%s"(NR==0?RS:"\n"), $1}' ) ;
do
        ssh-copy-id -f -i id_rsa_k2.pub $user
done
0
klaus

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

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

スクリプト内にリストがあると、誤って配置される可能性のある個別のデータファイルがなくなります。

0
solaris