Eu tenho alguns switches HP nos quais faço login via ssh. Os switches enviam um comando terminal para desativar a quebra de linha ("rmam" na linguagem terminfo), mas depois não conseguem reativá-lo, o que atrapalha meu terminal depois que eu saio da sessão ssh. Eu posso consertar o terminal executando tput smam
.
Existe alguma maneira de o ssh executar esse comando automaticamente após o término da minha sessão ssh?
Não me mataria executá-lo como um comando automático de shell ou alias ssh
para sempre executar esse comando posteriormente, mas eu preferiria resolver o problema via ssh para que eu possa limitar o comando a ser executado apenas depois de conectar-me a conhecidos -bad hosts.
Meu cliente ssh é o OpenSSH_6.2p2, mas posso alterar ou atualizar se houver um novo recurso em algum lugar.
ssh 1.2.3.4 && tput smam
Respostas:
O OpenSSH possui uma opção chamada
LocalCommand
que executa um comando no lado do cliente quando você faz uma conexão ssh. Infelizmente, ele executa o comando antes que a sessão ssh seja estabelecida, não depois. Mas isso me deu a ideia de que eu poderia, de alguma forma, conseguir que o processo anterior aguarde o término da sessão ssh. Apesar do processo ssh ser o PID pai do LocalCommand, verifica-se que ainda não é tão fácil.No entanto, encontrei algo que funciona para mim no MacOS X e deveria funcionar em (outros) BSDs, se não no Linux. Eu escrevi um pequeno programa C que usa a
kqueue()
interface para aguardar por conta própria o ppid e, em seguida, execute um comando fornecido assim que o processo terminar. (Código fonte listado abaixo, para aqueles que estão interessados.)Agora eu só tenho que fazer referência a este programa no meu
~/.ssh/config
arquivo:E isso parece funcionar muito bem. Aqueles de vocês no Linux ... acho que você pode tentar o mesmo tipo de pesquisa pesquisando
LocalCommand
o ppid do sis e espero que esse pid não seja reutilizado. (Consulte /programming/1157700/how-to-wait-for-exit-of-non-children-processes )wait4parent.c:
fonte
Você pode criar um wrapper ssh simples para isso e especificar comandos a serem executados após o ssh, por exemplo
fonte
eval
isso. Ele joga fora o benefício da citação dupla$@
.