Como sair de uma conexão SSH em um script bash

Como sair de uma conexão SSH em um script bash

Eu li vários posts aqui sobre esse tópico, mas cada solução que encontro parece ser uma linha onde você executa um comando.

Estou criando um script onde faço ssh para vários hosts diferentes, um após o outro. O objetivo é fazer ssh para uma máquina, executar alguns comandos locais, executar um script, esperar que ele termine e então sair da sessão ssh e passar para a próxima.

Porém, quando uso o comando "exit" ele não funciona e simplesmente sai do script por completo.

Responder1

Acho que seu script não está saindo da sessão do shell porque você o está chamando diretamente com ./exit.sh. Você deveria sourcefazer isso.

Uma exitinstrução em seu script fechará a sessão do shell.

$ source exit.sh
# or
$ . exit.sh

O sourcebuiltin executa seu script nocontexto atual do shell, enquanto ./exit.shlança umnova conchapara executá-lo.

Responder2

Você já tentou colocar os comandos em um arquivo e usar cat com ele ou EOF

ssh -t [email protected] << EOF
 command1
 command2
 exit
EOF

Responder3

Eu recomendo observar pssho que você está tentando realizar - ele permite que você lide facilmente com as nuances de abertura/fechamento de conexões entre máquinas e pode até mesmo executar em paralelo para reduzir o tempo de execução.

Ele ainda é usado sshcomo protocolo de transporte, portanto é obviamente tão seguro quanto uma sshconexão em loop.

https://linux.die.net/man/1/pssh

Responder4

Geralmente você pode fazer um forloop sshsem problemas.

$ for srv in 192.168.88.138; do echo $srv:; ssh $srv uptime; done
192.168.88.138:
 13:27:25 up 30 days,  8:42,  1 user,  load average: 4.15, 4.06, 4.06

Então, neste caso, corri uptimepara o outro lado. Você pode substituir uptimepelo que deseja executar. O que quer que você coloque lá é onde a saída precisa estar. uptimesai assim que imprime sua saída, mas se você estiver escrevendo o script, pode ser necessário garantir que ele saia para que o forloop possa continuar.

Se você estiver fazendo algo complicado, recomendo criar o script em um arquivo separado e, em seguida, scpenviá-lo para o servidor em que deseja executá-lo e, em seguida, ssh para executá-lo. Tentar inserir algo complicado no ssh por meio de citações e escapes é mais desafiador do que normalmente vale a pena.

Já fiz isso centenas de vezes e funciona bem quando você deseja que as coisas sejam executadas em um servidor por vez. Se você quiser que as coisas funcionem em paralelo, existem outras opções, mas eu daria uma olhadaprimeiro.

informação relacionada