
Cenário: Servidores: A, B e C (Todos Linux)
Arquivo:Arquivo.txt
Agora preciso enviar o arquivo do Servidor A para B&C usando SCP, mas preciso inserir a senha e o nome do arquivo apenas uma vez.
Precisa saber como conseguir isso.
Tentei sshpass
, mas parece que não está instalado e não consigo instalá-lo :(
sshpass:command not found
Código usado:(Aqui é necessário inserir a senha todas as vezes)
#!/bin/bash
echo "Enter Package Name:\c"
read package
package1="$package"
echo
scp ${package1} User@ServerB:/tmp/
scp ${package1} User@ServerC:/tmp/
Responder1
Você pode remover a solicitação de "senha" desta forma. No PC com o arquivo (Servidor A), em um terminal digite:
ssh-keygen -t rsa -b 2048
Enter file in which to save the key (/<user>/.ssh/id_rsa): [Hit Enter]
Enter passphrase (empty for no passphrase): [Hit Enter]
Enter same passphrase again: [Hit Enter]
Your identification has been saved in /<user>/.ssh/id_rsa.
Your public key has been saved in /<user>/.ssh/id_rsa.pub.
Então você precisa copiar /<user>/.ssh/id_rsa.pub
para os servidores B e C. Nos servidores B e C, faça o seguinte. NOTA: mkdir -p ~/.ssh
Pode não ser necessário.
mkdir -p ~/.ssh
cat id_rsa.pub >> ~/.ssh/authorized_keys
rm id_rsa.pub
Agora você pode se conectar do Servidor A ao B e C sem senha. Por exemplo, seu script agora seria tão simples quanto (com uma verificação básica de arquivo):
#!/bin/sh
ask () {
echo -n "Enter Package Name: "
read package
if [ ! -f "$package" ]
then
echo "
${package} is not a file. Try again.
"
ask
else
upload "$package"
fi
}
upload () {
echo "put \"$1\" \"/tmp/$1\" > sftp.cmd
sftp User@serverB < sftp.cmd
sftp User@serverC < sftp.cmd
rm -f sftp.cmd
}
ask
exit