Normalmente, se você passar um comando para o ssh dessa maneira
ssh me@example.com 'some-command.sh'
Você obtém uma sessão não interativa e o ssh sai assim que o comando (ou script, ou o que seja) é executado. Como posso obter uma sessão interativa e, ainda assim, executar um comando que especifiquei na minha máquina local. Por exemplo, eu gostaria de poder abrir a tela e reiniciar uma sessão de tela específica:
ssh me@example.com 'screen -r 12345'
mas isso não é permitido, retornando o erro "Deve estar conectado a um terminal". que eu presumo que significa essencialmente "deve chamar esse comando de um shell interativo".
Como outro exemplo, eu uso uma tonelada de máquinas no trabalho que muitas vezes exigem que eu use uma conta compartilhada para ter direitos de fazer certas coisas (sim, eu sei: má ideia, mas não me culpe, não configurei coisas que caminho), e eles geralmente têm o ksh como shell padrão. Gostaria de fazer login, alternar para o bash (ou zsh) e obter o .bash_profile da minha conta (ou .zshrc). Seria fácil se eu pudesse estabelecer uma sessão ssh interativa e passar um comando para a máquina remota para executar no logon.
Eu tenho uma solução muito inteligente (e não testada) em mente que postarei, mas espero que alguém saiba uma maneira melhor.
ATUALIZAÇÃO: para aqueles que não perceberam isso, não estou planejando fazer tudo isso manualmente, portanto, me dizer para abrir uma sessão interativa e depois fazê-lo manualmente não resolve nada.
2ª ATUALIZAÇÃO: Para tentar novamente esclarecer: Estou tentando executar comandos (arbitrários) no servidor (especificado programaticamente no cliente), mas depois tenho uma sessão interativa aberta que é afetada por qualquer coisa executada por esses comandos programáticos.
echo "command" | ssh user@remote_host