
Quero executar um comando automaticamente após me conectar a outra máquina via ssh, sem que a sessão ssh seja fechada automaticamente.
Depois de pesquisar na internet encontrei algumas soluções, mas nenhuma delas funciona do jeito que preciso.
ssh bla@bla "ls"
Isso executa o ls
comando na máquina remota, mostra a saída e fecha a conexão.
Eu também tentei editar o arquivo de configuração ssh com
Host bla
HostName bla
User bla
IdentityFile ~/.ssh/key
RemoteCommand ls
RequestTTY force
Mesmo problema, conecta via ssh, executa o ls
comando, mostra a saída e sai. Nem mesmo a RequestTTY
opção ajudou.
ssh bla@bla "ls ; bash"
Isso não desconecta após a execução ls
, mas não recebo uma interface de terminal completa, apenas uma linha de comando básica que não mostra o arquivo me@machine:~$ thing
.
O que eu realmente quero:
Algum alias do bash ou .ssh/config
uma entrada que me permitirá digitar um comando simples que se conectará à máquina remota e, em seguida, executará um comando lá e deixará o terminal aberto. Basicamente, como se eu fizesse isso manualmente:
tipo
ssh blah@blah
e depois de conectar eu digitaria
ls
Responder1
ssh bla@bla "ls ; bash"
Isso não desconecta após a execução
ls
, mas não recebo uma interface de terminal completa, apenas uma linha de comando básica que não mostra ame@machine:~$
coisa.
Se você especificar um comando (por exemplo, ls ; bash
acima), o servidor SSH não fornecerá um pseudoterminal. Você observou exatamente isso.
Por outro lado, sole ssh bla@bla
aloca um pseudoterminal por padrão. Então é isso que você quer. Force a alocação de pseudoterminal, use -t
ou RequestTTY
.
Nem mesmo a
RequestTTY
opção ajudou.
Não vai te ajudar se o comando remoto for ls
apenas. Você precisa ls; bash
ou similar.
Parece que quando você solicitou um tty, você não solicitou bash
. E quando você solicitou bash
after ls
, você não solicitou um tty. Você precisa de ambos:
ssh -t bla@bla "ls; bash"
A nota ls
também usará o pseudoterminal. Por favor, leia a seção "imagem mais ampla" doessa minha respostapara aprender a diferença (especialmente onde se lê "há uma peculiaridade").
Responder2
Para se livrar do me@machine você precisa definir a variável de ambiente PS1. Tentar:
ssh bla@bla "PS1=\"\"; ls; bash"