¿Comando único para iniciar sesión en SSH y ejecutar el programa?

58

¿Hay alguna manera de estructurar un solo comando para iniciar sesión a través de SSH en un servidor remoto y ejecutar un programa en el shell de inicio de sesión remoto?

En el manual de OpenSSH, se lee "Si se especifica el comando, se ejecuta en el host remoto en lugar de un shell de inicio de sesión". Entonces, por ejemplo, ssh user@server mailiniciará sesión en el servidor remoto, mostrará el estado del buzón y luego lo regresará al shell local. ¿Hay alguna manera de permanecer en el shell remoto después de mostrar el estado del correo?

Además, ssh user@server [command]no parece funcionar si el comando es un programa, por ejemplo vim o mutt. ¿Hay alguna manera de iniciar sesión en el shell remoto y ejecutar un programa mientras permanece en el shell remoto durante el programa y después de salir del programa, y ​​finalmente sale de un logoutcomando específico (al igual que en una sesión SSH normal)?

Eventualmente me gustaría poder poner un comando como un alias en el .bashrc local, para que pueda ejecutarse rápidamente cuando lo desee. Un ejemplo sería iniciar sesión a través de SSH en un servidor remoto y abrir mutt en el servidor remoto para leer o enviar correos electrónicos.

usuario981178
fuente
¿Qué quiere decir con permanecer en el shell remoto después de mostrar el estado del correo? ¿No sería equivalente a hacer un ssh después de ejecutar el comando de correo ssh remote@server mail ; ssh remote@server:? Además, cualquier comando ejecutado de forma remota que necesite un terminal no sobrevivirá / funcionará a través de ssh ¿verdad?
mkc
Bueno, eso parece funcionar para ejecutar el comando y luego obtener el shell remoto, pero lo hace abriendo una conexión SSH y ejecutando el comando y cerrando la conexión SSH y luego abriendo otra conexión SSH. ¿Hay alguna manera de hacer todo esto con la primera conexión? Además, esto todavía no habilita el comando para ejecutar un programa.
user981178

Respuestas:

90

¿Has probado ssh -t user@server "mail && bash"(o reemplazas bashcon el shell que quieras)?

El -tes necesario con el fin de crear un pseudo-TTY para golpe para utilizar como un shell interactivo.

jsbillings
fuente
1
Aunque, lo admito, probablemente preferiría correr muttdentro de un tmuxo screen, y luego puedo conectar y volver a conectar a voluntad, además puedo ejecutar tantos shells adicionales como quisiera.
jsbillings
1
Bueno, estoy encontrando varios comportamientos con este comando. Utilizado como anteriormente (en la respuesta), todavía solo muestra el estado del buzón y luego cierra la sesión, pero ahora también muestra que la conexión está cerrada. Utilizado como anteriormente, pero con nano, por ejemplo, en lugar de correo, abre una sesión de nano y luego, al salir, regresa al shell de bash remoto, que luego debe salir en exitlugar de logout. Todavía no puedo probarlo con mutt (o similar).
user981178
¿La -topción produce algún tipo de problema de seguridad? No he usado esto antes.
user981178
Hasta donde yo sé, no presenta ningún problema de seguridad. ¿Has intentado reemplazar el &&con a ;?
brm
cualquier comando que salga con un estado de salida distinto de cero provocaría que el segundo comando no se ejecute, debido a la lógica de shell.
jsbillings