Com esse loop simples, você pode automatizá-lo e se espalhar para todos os servidores remotos.
#!/bin/bash
for ip in 'cat /home/list_of_servers'; do
ssh-copy-id -i ~/.ssh/id_rsa.pub $ip
done
Eu estou tentando copiar o .ssh / id_rsa.pub do nosso servidor central para vários servidores. Eu tenho o seguinte script que eu costumo usar para enviar alterações para os diferentes servidores.
#!/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
Mas, neste caso, preciso catar a chave pública no servidor local e adicioná-la a vários servidores. Existe uma maneira de usar o script de documento acima aqui para executar o seguinte.
cat .ssh/id_rsa.pub |ssh [email protected] 'cat > .ssh/authorized_keys'
Para copiar sua chave pública, você tem algo embutido no próprio openssh. Então, ao invés de cat
e ssh
, use isto: -
ssh-copy-id -i ~/.ssh/id_rsa.pub YOUR-REMOTE-HOST
A resposta aceita não funcionará se for necessário colocar a chave pública de outra pessoa em várias máquinas. Então, eu criei a seguinte solução:
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
Esse script adiciona a nova chave aos usuários na lista de máquinas, desde que o ambiente em que ela é executada tenha acesso.
Exemplo de tc-agents-list.txt
:
[email protected]
[email protected]
[email protected]
[email protected]
Tags ssh shell-script