Como executo um comando após uma conexão ssh, sem desconectar?

Como executo um comando após uma conexão ssh, sem desconectar?

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 lscomando 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 lscomando, mostra a saída e sai. Nem mesmo a RequestTTYopçã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/configuma 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 a me@machine:~$coisa.

Se você especificar um comando (por exemplo, ls ; bashacima), o servidor SSH não fornecerá um pseudoterminal. Você observou exatamente isso.

Por outro lado, sole ssh bla@blaaloca um pseudoterminal por padrão. Então é isso que você quer. Force a alocação de pseudoterminal, use -tou RequestTTY.

Nem mesmo a RequestTTYopção ajudou.

Não vai te ajudar se o comando remoto for lsapenas. Você precisa ls; bashou similar.

Parece que quando você solicitou um tty, você não solicitou bash. E quando você solicitou bashafter ls, você não solicitou um tty. Você precisa de ambos:

ssh -t bla@bla "ls; bash"

A nota lstambé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"

informação relacionada