Como posso esperar até que um prompt de shell apareça antes que outros comandos sejam executados (em um script bash, por exemplo? ssh user@host echo "test";
) trabalhar em cada host. Eu gostaria de esperar o prompt #
ou $
aparecer antes de continuar a execução echo "test"
- como posso fazer isso?
Quando eu, ssh user@host
então, espero pelo #
e manualmente echo "test"
, funciona como você esperaria. Como posso colocar isso em um script? ssh user@host -t echo "test"
também não funciona.
Estou particularmente tentando fazer algo como: ssh -o StrictHostKeyChecking=no -p 2222 user@host -t tail -f /var/log/MyFile.log
ou seja, seguir um arquivo de log de um host e mostrar o resultado no shell local Em vez de seguir o arquivo de log, ele apenas me lança no prompt:
No entry for terminal type "screen";
using dumb terminal settings.
#
-->
Por favor, ignore que o prompt é root
, isso não faz parte deste tópico. E sim, ele é iniciado a partir de uma sessão de tela - a partir de um terminal simples (xterm), ele diz No entry for terminal type "xterm";
(por exemplo) em vez disso.
Sem -t
eu recebo FATAL: not a terminal
e isso me joga de volta para o shell local.
Como último recurso, você pode usar o programa "esperar".
Aqui está um exemplo simples de como usar o expect com ssh: https://www.journaldev.com/1405/expect-script-ssh-example-tutorial
Acabei de conversar com o cara que implementou isso recentemente! Ele disse que é devido ao fato de que o shell é canalizado através de algum outro binário de login por razões de segurança (capacidade de desabilitar o acesso root para compilações de produção). A solução é alterar o caminho para o binário extra de
/etc/passwd
volta ao binário do shell.