GNU/Linux >> Tutoriales Linux >  >> Linux

Ctrl-c Manejo en sesión Ssh?

Cuando inicio una sesión SSH que ejecuta un comando de ejecución prolongada, ¿qué sucede con Ctrl? +C (SIGINT) manejo?

Puedo ver que la sesión de SSH está cerrada, pero no estoy seguro de quién obtiene el SIGINT primero:es…

  1. el comando remoto de larga ejecución? es decir, (a) se llama al controlador de señal en el comando remoto y detiene el comando remoto, (b) el shell que lo generó detecta que el comando se detuvo y también se detiene (c) el sshd remoto detecta que el shell se detuvo, por lo que cierra la conexión

    o

  2. el ssh local recibe la señal y cierra la conexión.

Creo que (1) está sucediendo, pero quiero asegurarme.

Tampoco estoy seguro de lo que sucede con el manejo de shell de SIGINT en este caso. Por ejemplo, si yo...

ssh remote 'while true ; do sleep 1 ; date ; done'

y Ctrl +C , luego se interrumpe la conexión remota. ¿Hay alguna manera de ejecutar el comando remoto bajo un shell que permanecerá activo después de Ctrl? +C ? Es decir, en este caso, ¿detener el ciclo y permitirme seguir trabajando en el shell remoto?

Respuesta aceptada:

ssh se puede invocar de diferentes maneras, cada una de las cuales da como resultado un tratamiento ligeramente diferente de las señales iniciadas por el terminal como Ctrl-C .

  • ssh remotehost ejecutará una sesión interactiva en remotehost . En el lado del cliente, ssh intentará establecer el tty utilizado por stdin en modo "sin procesar", y sshd en el host remoto asignará un pseudo-tty y ejecutará su shell como un shell de inicio de sesión (por ejemplo, -bash ).

    Establecer el modo sin procesar significa que los caracteres que normalmente enviarían señales (como Ctrl-C y Ctrl- ) en su lugar, simplemente se insertan en el flujo de entrada. ssh enviará dichos caracteres tal como están al host remoto, donde probablemente enviarán SIGINT o SIGQUIT y, por lo general, matarán cualquier comando y lo devolverán a un shell en el host remoto. La conexión ssh permanecerá activa, siempre que el shell remoto esté activo.

  • ssh -t remotehost command args ... ejecutará una sesión interactiva en remotehost , igual que el anterior, excepto en el lado remoto, your_shell -c "command args ..." se ejecutará. Como arriba, si escribe Ctrl-C , se enviará al host remoto, donde el comando probablemente recibirá SIGINT e inmediatamente saldrá, y luego se cerrará el shell remoto. El sshd remoto luego cierra la conexión y ssh informa Connection to remotehost closed.

  • ssh remotehost command args ... ejecutará una sesión no interactiva en remotehost . En el lado del cliente, ssh no configure el tty en modo sin procesar (bueno, excepto para leer una contraseña o frase de contraseña). Si escribe Ctrl-C , ssh se enviará SIGINT y se cancelará de inmediato, sin siquiera emitir una Connection to remotehost closed mensaje.

    El your_shell -c "command args ..." los procesos probablemente seguirán ejecutándose en el host remoto . O saldrán solos o un proceso intentará escribir datos en el socket ssh ahora cerrado, lo que provocará que se le envíe una señal SIGPIPE (típicamente) fatal.

Relacionado:¿Cómo vaciar el caché de Magento 1.9.x usando SSH?
Linux
  1. 5 formas de mantener las sesiones y los procesos SSH remotos en ejecución después de la desconexión

  2. ¿Permitir acceso Ssh remoto?

  3. Pasar variables en el comando ssh remoto

  4. Mantener viva la sesión SSH

  5. Túnel vpn de acceso remoto SSH

Cómo SSH en un directorio particular en Linux

Ejecutar comandos en sistemas Linux remotos a través de SSH

SSHFS:Montaje de un sistema de archivos remoto a través de SSH

Cómo realizar una copia de seguridad remota de Linux mediante SSH

Cómo usar SSH para conectarse a un servidor remoto

Cómo:Administración remota de FreeBSD