Eu assumirei que estes são todos os hosts Linux e que você tem acesso root a eles. Também assumirei que eles estão usando apt
para o gerenciamento de pacotes, mas é fácil aplicar essa solução com yum
ou pacman
ou qualquer outro gerenciador de pacotes.
Tanto quanto eu sei, ssh
não oferece nenhuma maneira de especificar uma senha na linha de comando, então primeiro você precisará instalar sshpass
na sua máquina local:
sudo apt-get install sshpass
Isso permitirá que você passe a senha como um argumento de linha de comando:
sshpass -p '<password>' ssh user@server
Agora, crie um arquivo com todos os IPs em que você está interessado, um por linha. Você pode analisar esse arquivo para instalar sshpass
em cada máquina remota. Se sua senha for foo
e você estiver se conectando como root
, faça
while read ip; do
sshpass -p 'foo' ssh root@$ip "apt-get install sshpass";
done < ips.txt
sshpass
agora está instalado em cada servidor. Agora, passe pelos servidores novamente e copie seus arquivos. Se você estiver copiando como root
e a root
senha para seu destination
for bar
, faça o seguinte:
while read ip; do
sshpass -p 'foo' ssh root@$ip "sshpass -p 'bar' scp files dest:/results/";
done < ips.txt
Você também pode usar sshpass
para copiar seus arquivos de chave e, desde que você tenha usado uma frase secreta vazia, permitir acesso sem senha para não ter esse problema da próxima vez:
while read ip; do
sshpass -p 'foo' ssh root@$ip \
"sshpass -p 'bar' ssh-copy-id -i ~/.ssh/id_rsa.pub root@destination";
done < ips.txt
Uma vez feito isso, você poderá copiar os arquivos usando:
while read ip; do ssh root@$ip "scp files dest:/results/"; done < ips.txt