Ssh genel anahtarını birden çok Linux ana bilgisayarına kopyala


14

Merkezi sunucumuzdan .ssh / id_rsa.pub dosyasını birden çok sunucuya kopyalamaya çalışıyorum. Ben genellikle farklı sunuculara değişiklikleri göndermek için kullandığım aşağıdaki komut dosyası var.

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

Ancak bu durumda, yerel sunucudaki ortak anahtarı kullanmam ve birden çok sunucuya eklemem gerekiyor. Aşağıdakileri yürütmek için burada belge komut dosyası kullanarak bir yolu var mı.

cat .ssh/id_rsa.pub |ssh tony@0.0.0.0 'cat > .ssh/authorized_keys'

Uzaktan kumandalara tek bir merkezi konumdan kopyalandığınız için neden yerelde kedi kullanmanız gerekiyor?
klerk

Merkezi sunucunun ortak anahtar dolayısıyla yerel sunucu eklemeniz gerekir. Karışıklık için özür dilerim.
user67186

Yanıtlar:


20

Bu basit döngü ile otomatikleştirebilir ve tüm uzak sunuculara yayılabilir.

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

Merhaba, ben senin anwser kabul ve iyi çalıştı. Teşekkürler
user67186 17:14

+1. Ben işi halletmek çok kolay bir betik tarzı büyük bir hayranıyım!
Laith Leo Alobaidy

4

İşte ssh-keygen'i her seferinde şifre sormadan birden fazla sunucuya kopyalamak için basit komut dosyası.

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

3

Başka birinin ortak anahtarını birden fazla makineye koyması gerekiyorsa, kabul edilen cevap çalışmaz. Bu yüzden, aşağıdaki çözümü buldum:

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

Bu komut dosyası, üzerinde çalıştığı ortamın erişebilmesi koşuluyla, yeni anahtarı makine listesindeki kullanıcılara ekler.

Örnek tc-agents-list.txt:

root@10.10.0.1
root@10.10.0.2
root@10.10.0.3
root@10.10.0.4

2

Ortak anahtarınızı kopyalamak için, dahili bir şey vardır. Bunun yerine catve bunu sshkullanın: -

ssh-copy-id -i ~/.ssh/id_rsa.pub YOUR-REMOTE-HOST

IP sunucusunda bulunan uzak sunuculara merkezi sunucunun genelini kopyalayarak komutu yürütmek istiyorum. Senaryo onlar aracılığıyla yinelenir. Dolayısıyla, örneğiniz burada yararlı olmayabilir. Teşekkürler
user67186 17:14

Ortak anahtarın varsayılan konumunu kullanıyorsanız -i seçeneğini kullanmanıza gerek yoktur.
Laith Leo Alobaidy

0

Bunu basit bir while-loop ve katıştırılmış sunucu listesiyle şöyle yapabilirsiniz:

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

Listenin betiğin içinde olması, yanlış yerleştirilebilen ayrı veri dosyaları ile ortadan kalkar.


ssh-copy-iddiğer bazı yanıtlarda zaten önerilmişti.
RalfFriedl

0

Sunucuların IP listesi, adı SUNUCU ve yalnızca sunucuların IP adreslerini içeren bir dosyanız olduğunu varsayarsak.

Bu için döngü de çalışacaktır.

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.