¿Cómo ejecuto un comando después de una conexión ssh, sin desconectarme?

¿Cómo ejecuto un comando después de una conexión ssh, sin desconectarme?

Quiero ejecutar un comando automáticamente después de conectarme a otra máquina a través de ssh, sin que la sesión ssh se cierre automáticamente.

Después de buscar en Internet encontré algunas soluciones, pero ninguna funciona como necesito.

ssh bla@bla "ls"

Esto ejecuta el lscomando en la máquina remota, me muestra el resultado y cierra la conexión.

También intenté editar el archivo de configuración ssh con

Host bla
        HostName bla
        User bla
        IdentityFile ~/.ssh/key
        RemoteCommand ls
        RequestTTY force 

El mismo problema, esto se conecta a través de ssh, ejecuta el lscomando, me muestra el resultado y luego sale. Ni siquiera la RequestTTYopción ayudó.

ssh bla@bla "ls ; bash"

Esto no se desconecta después de ejecutar ls, pero no obtengo una interfaz de terminal completa, solo una línea de comando básica que no muestra el archivo me@machine:~$ thing.

Lo que realmente quiero:

Ya sea algún alias de bash o .ssh/configuna entrada que me permitirá escribir un comando simple que se conectará a la máquina remota y luego ejecutará un comando allí y dejará la terminal abierta. Básicamente como si hiciera esto a mano:

tipo

ssh blah@blah

y luego, después de conectarlo, escribiría

ls

Respuesta1

ssh bla@bla "ls ; bash"

Esto no se desconecta después de ejecutar ls, pero no obtengo una interfaz de terminal completa, solo una línea de comando básica que no muestra la me@machine:~$cosa.

Si especifica un comando (por ejemplo, ls ; basharriba), el servidor SSH no proporcionará un pseudoterminal. Has observado exactamente esto.

Por otro lado, sole ssh bla@blaasigna un pseudoterminal de forma predeterminada. Entonces esto es lo que quieres. Forzar la asignación de pseudoterminales, el uso -to RequestTTY.

Ni siquiera la RequestTTYopción ayudó.

No te ayudará si el comando remoto es lssolo. Necesitas ls; basho similar.

Parece que cuando solicitaste un tty, no lo solicitaste bash. Y cuando solicitó bashdespués ls, no solicitó un tty. Necesitas ambos:

ssh -t bla@bla "ls; bash"

Note lstambién utilizará el pseudoterminal. Lea la sección "panorámica más amplia" deesta respuesta míapara aprender la diferencia (especialmente donde dice "hay una peculiaridad").

Respuesta2

Para deshacerse de me@machine, debe configurar la variable de entorno PS1. Intentar:

ssh bla@bla "PS1=\"\"; ls; bash"

información relacionada