Experimente assim:
$ sudo sshpass -p $password ssh -t -oStrictHostKeyChecking=no $username@$ipaddress << EOF
command_one;
command_two;
command_three;
EOF
Eu fiz o acima e tudo funciona bem.
Existe uma maneira de usar os vários comandos em sshpass
, eu tentei com combinações de diferenças, mas isso gera um erro.
$ sudo sshpass -p $password ssh -t -oStrictHostKeyChecking=no $username@$ipaddress << EOF
command_one
command_two
command_three
EOF
Qual é o comando correto e exato, por favor me dê um exemplo, se possível.
Experimente assim:
$ sudo sshpass -p $password ssh -t -oStrictHostKeyChecking=no $username@$ipaddress << EOF
command_one;
command_two;
command_three;
EOF
Eu fiz o acima e tudo funciona bem.
Sua solução funciona com ou sem sshpass, se não estiver funcionando para você, provavelmente há algo errado.
Observe também que você deve sempre citar todas as variáveis.
Além disso, você não deve desativar a verificação stricthostkey levemente. Se a sua chave do host estiver mudando frequentemente, seu servidor provavelmente estará comprometido
Aqui estão algumas maneiras de alcançar seu objetivo:
Usando um separador de comando ( ;
, &&
, ||
)
sshpass -p "$password" ssh -t -oStrictHostKeyChecking=no "$username@ipaddress" 'command_one; command_two; command_three'
Usando um aqui-doc (EOF de aspas simples para ter qualquer substituição de variáveis / comando expandida no host remoto):
sshpass -p "$password" ssh -t -oStrictHostKeyChecking=no "$username@ipaddress" <<EOF
command_one
command_two
command_three
EOF
Usando um arquivo separado:
file.sh
command_one
command_two
command_three
Então execute assim:
cat file.sh | sshpass -p "$password" ssh -t -oStrictHostKeyChecking=no "$username@ipaddress"
Usando um túnel ssh:
sshpass -p "$password" ssh -f -L 3306:localhost:3306 "$username@ipaddress" sleep 300 # This will open a tunnel to the remote host and hold it open for 5 minutes
ssh -T "$username@ipaddress" 'command_one'
ssh -T "$username@ipaddress" 'command_two'
ssh -T "$username@ipaddress" 'command_three'
Tags bash linux shell shell-script sshpass