Auto inicio la pantalla gnu cuando ssh en uno de mis propios servidores. Cuando termine, tengo que separarme. Luego salga para salir de ssh. Esto significa que cuando vuelva a ingresar al servidor en algún momento, puedo continuar donde lo dejé.
¿Puedo crear un alias (por ejemplo) que (desde la pantalla) separe y suelte ssh?
Comentarios
Responder
Iniciando screen
al iniciar sesión en el host remoto (ejecutado en su máquina local):
ssh -t user@host screen
En la pantalla sesión, en el host remoto, para desconectar y cerrar la sesión (lo que finalizaría la sesión SSH a menos que esté usando una conexión persistente usando un socket de control (es decir, usando la configuración ControlMaster
con ControlPersist
en ~/.ssh/config
)):
screen -d
Más tarde, para iniciar sesión y vuelva a adjuntar:
ssh -t user@host screen -r
Tenga en cuenta que debe usar -t
con ssh
, forzando la asignación de pseudo-terminal, para iniciar screen
de esta manera.
El alias en el host remoto sería f o screen -d
, tal vez detach="screen -d"
o algo similar.
En el host local, podría tener una sección en su ~/.ssh/config
archivo que dice
Host *-screen RequestTTY force RemoteCommand screen -d -R Host myhost myhost-screen HostName myhost.somedomain.example.com User myname
Luego, siempre que utilice
ssh myhost-screen
una screen
se crearía (o volvería a adjuntar) una sesión en el host especificado, mientras
ssh myhost
no usaría screen
.
Nota: RemoteCommand
se agregó en OpenSSH 7.6 (2017 -10-03).
Para tmux
:
- Use
tmux new-session -A -s "%n"
en~/.ssh/config
en lugar descreen -d -R
. - Use prefix d o
tmux detach-client
otmux detach
para separar.
Comentarios
- Bien, gracias. En casa, esto funcionará muy bien. No sabía sobre ' Forzar asignación de pseudo-tty '. Probé esto y funciona.
Responder
Cuando ejecuta su comando de pantalla para recuperar o crear su pantalla , Después de agregas un kill de tu shell padre, por lo que eliminarás tu conexión ssh.
un ejemplo para matar mi proceso padre si el padre es bash
kill $( ps -ax -o pid,ppid,args | grep "^$$ " | grep bash | awk "{print $2} " )
Comentarios
- Thx. Si ingreso desde algún lugar donde no puedo especificar una aplicación para ejecutar (como en línea ssh app.shellngn.com ), y modifico su línea de código para busque sesiones ssh, esto funcionará.
screen