Me gustaría hacer algo como ssh example.com 'ls'Sin embargo por página de manual de ssh:
Si se especifica el comando , se ejecuta en el host remoto en lugar de un shell de inicio de sesión.
Entonces, lo que sucede es que lsmuestra su salida y luego ssh sale.
Lo que no puedo entender es cómo abrir el shell de inicio de sesión completo y luego ejecutar el comando dentro de ese shell. Dejando el shell abierto después de ejecutar el comando. Como si hubiera hecho manualmente lo siguiente:
localhost$ ssh example.com
example.com$ ls
/folder1
/folder2
example.com$ _
¿Algunas ideas?

ssh example.com 'ls;bash'?Respuestas:
Solo dile a bash que se ejecute
lsy luego se inicie en un shell de inicio de sesiónfuente
screen. De lo contrario, parece que hace lo que estaba tratando de hacer.-tForzar la asignación pseudo-terminal. Esto se puede usar para ejecutar programas arbitrarios basados en pantalla en una máquina remota. Es un poco más apropiado quebash -i.execNo se crea ningún proceso nuevo.-lbusca ~ / .bash_profile, ~ / .bash_login y ~ / .profile, en ese orden, y lee y ejecuta comandos desde ... Sin esto, probablemente no pueda ejecutar scripts / comandos desde el directorio ~ / bin, porque este código from ~ / .profile no se ejecutará sin-lbandera:fuente
bashpara permitir eso.exec bashoexec $SHELLEn su comentario sobre la respuesta de fons, usted dice que no funciona mientras lo usa
screen.¿Podrías dar más detalles sobre eso? Mirando el código fuente de openssh, sshd ejecuta el comando llamando
Entonces, por ejemplo, si su shell predeterminado es
screen, entonces esto no funcionará tan bien porquescreenla-cbandera simplemente anula su.scrreenrc. Entonces, realmente no hay forma de enviar comandos a la pantalla si es su shell predeterminado. Tendrás que ejecutar screen como el comando dado a ssh, pero con un shell predeterminado que no es screen .Si eso es lo que estás tratando de hacer, creo que las cosas se pondrán realmente extrañas, ya
screenque también cerrarán ventanas con programas no interactivos, por lo que tendrás que hacer un truco similar al de fons, pero un nivel más profundo. SO, con, por ejemplo, / bin / bash (y no la pantalla) como shell predeterminado Algo como:Lo cual debería, tomar una respiración profunda, ssh en el host, ejecutar bash -c con un comando de pantalla, lo que abrirá una nueva ventana. Si esta ventana solo abriera ls, terminaría y la pantalla terminaría, por lo que usamos el truco de fons dentro de la nueva ventana de pantalla .
Creo que funcionará, incluso si eso es lo que intentabas hacer;)
fuente
screenen esta situación es que normalmente lo cargoexec screen -RRdesde mi.profile. Esto significa quebash -lintenta cargar la pantalla que arroja el resto. parece que puedo evitarlo eliminando '-l' en las soluciones suyas y @fons (la suya luego me deja dentroscreen). Sin embargo, es algo inestable.Varias opciones -t fuerzan la asignación de tty, incluso si ssh no tiene tty local:
fuente