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 ls
muestra 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
ls
y luego se inicie en un shell de inicio de sesiónfuente
screen
. De lo contrario, parece que hace lo que estaba tratando de hacer.-t
Forzar 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
.exec
No se crea ningún proceso nuevo.-l
busca ~ / .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-l
bandera:fuente
bash
para permitir eso.exec bash
oexec $SHELL
En 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 porquescreen
la-c
bandera 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
screen
que 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
screen
en esta situación es que normalmente lo cargoexec screen -RR
desde mi.profile
. Esto significa quebash -l
intenta 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