Salin kunci publik ssh ke beberapa host Linux

14

Saya mencoba menyalin .ssh / id_rsa.pub dari server pusat kami ke beberapa server. Saya memiliki skrip berikut yang biasanya saya gunakan untuk mendorong perubahan ke server yang berbeda.

#!/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

Tetapi dalam kasus ini, saya perlu menggunakan kunci publik di server lokal dan kemudian menambahkannya ke beberapa server. Apakah ada cara dengan menggunakan skrip dokumen di atas untuk menjalankan yang berikut ini.

cat .ssh/id_rsa.pub |ssh tony@0.0.0.0 'cat > .ssh/authorized_keys'
pengguna67186
sumber
mengapa Anda perlu mengecek lokal karena Anda disalin dari satu lokasi pusat ke tempat terpencil?
klerk
Saya perlu menambahkan kunci publik server pusat maka server lokal. Maaf bila membingungkan.
user67186

Jawaban:

20

Dengan loop sederhana ini Anda dapat mengotomatiskannya dan menyebar ke semua server jarak jauh.

#!/bin/bash
for ip in `cat /home/list_of_servers`; do
    ssh-copy-id -i ~/.ssh/id_rsa.pub $ip
done
klerk
sumber
Hai, saya menerima anwser Anda dan itu berfungsi dengan baik. Terima kasih
user67186
+1. Saya penggemar berat gaya penulisan skrip yang sangat mudah yang menyelesaikan pekerjaan!
Laith Leo Alobaidy
4

Berikut ini adalah skrip sederhana saya untuk menyalin ssh-keygen ke beberapa server tanpa meminta kata sandi setiap kali.

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

Jawaban yang diterima tidak akan berfungsi jika seseorang perlu memasukkan kunci publik orang lain ke beberapa mesin. Jadi, saya datang dengan solusi berikut:

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

Skrip ini menambahkan kunci baru kepada pengguna pada daftar mesin, asalkan lingkungan yang dijalankan memiliki akses.

Contoh dari tc-agents-list.txt:

root@10.10.0.1
root@10.10.0.2
root@10.10.0.3
root@10.10.0.4
Ilya Sheershoff
sumber
2

Untuk menyalin kunci publik Anda, Anda memiliki sesuatu yang built-in di openssh itu sendiri. Jadi alih-alih catdan sshgunakan ini: -

ssh-copy-id -i ~/.ssh/id_rsa.pub YOUR-REMOTE-HOST
pemula
sumber
Saya ingin menjalankan perintah menyalin publik server pusat ke server jauh yang ada dalam file IP. Script iterates melalui mereka. Jadi, contoh Anda mungkin tidak berguna di sini. Terima kasih
user67186
Tidak perlu menggunakan opsi -i jika Anda menggunakan lokasi default kunci publik.
Laith Leo Alobaidy
0

Anda dapat melakukan ini dengan loop sementara sederhana dan daftar server tertanam seperti ini:

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

Memiliki daftar di dalam skrip tidak menghilangkan file data terpisah yang dapat salah tempat.

solaris
sumber
ssh-copy-idtelah disarankan dalam beberapa jawaban lain.
RalfFriedl
0

Dengan asumsi Anda memiliki file dengan daftar IP server, nama SERVER, dan hanya alamat IP dari server yang ditentukan.

Ini untuk loop juga akan berfungsi.

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
klaus
sumber