Múltiplos comandos em sshpass [closed]

2

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.

    
por Harry 01.08.2018 / 21:40

2 respostas

3

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.

    
por 01.08.2018 / 22:13
3

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'
por 01.08.2018 / 22:19