Copia la chiave pubblica ssh su più host Linux


14

Sto cercando di copiare .ssh / id_rsa.pub dal nostro server centrale su più server. Ho il seguente script che di solito uso per inviare le modifiche ai diversi server.

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

Ma in questo caso, ho bisogno di cat la chiave pubblica sul server locale e quindi aggiungerlo a più server. C'è un modo usando lo script del documento qui sopra per eseguire quanto segue.

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

perché hai bisogno di cat in locale poiché sei copiato da una posizione centrale per i telecomandi?
Klerk,

Devo aggiungere la chiave pubblica del server centrale e quindi il server locale. Dispiace per la confusione.
user67186,

Risposte:


20

Con questo semplice ciclo puoi automatizzarlo e diffonderlo su tutti i server remoti.

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

Ciao, accetto la tua risposta e ha funzionato bene. Grazie
user67186,

+1. Sono un grande fan di uno stile di scripting molto semplice che porta a termine il lavoro!
Laith Leo Alobaidy,

4

Ecco il mio semplice script per copiare ssh-keygen su più server senza chiedere password ogni volta.

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

3

La risposta accettata non funzionerà se si deve mettere la chiave pubblica di qualcun altro su più macchine. Quindi, ho trovato la seguente soluzione:

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

Questo script aggiunge la nuova chiave agli utenti nell'elenco delle macchine, a condizione che l'ambiente su cui viene eseguita abbia accesso.

Esempio di 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

Per copiare la tua chiave pubblica, hai qualcosa incorporato in openssh stesso. Quindi, invece di cate sshutilizzare questo: -

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

Voglio eseguire il comando copiando il pubblico del server centrale su server remoti che esistono nel file IP. La sceneggiatura scorre attraverso di loro. Quindi, il tuo esempio potrebbe non essere utile qui. Grazie
user67186,

Non è necessario utilizzare l'opzione -i se si utilizza la posizione predefinita della chiave pubblica.
Laith Leo Alobaidy,

0

Puoi farlo con un semplice elenco di server while-loop e embedded come questo:

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

Avere l'elenco all'interno dello script elimina i file di dati separati che possono essere fuori posto.


ssh-copy-idè già stato suggerito in alcune altre risposte.
RalfFriedl,

0

Supponendo di avere un file con l'elenco IP dei server, il nome SERVER e solo gli indirizzi IP dei server sono definiti.

Anche questo per loop funzionerà.

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.