servidor protocolo funciona ejemplo como comandos linux ssh remote-execution

linux - protocolo - ssh windows



La ejecución del comando SSH se bloquea, aunque las funciones de shell interactivas están bien (6)

Cuando intento ejecutar un comando en un servidor remoto con ssh, el comando ssh se bloquea después de que la exec request accepted mensaje de depuración y, finalmente, se agote.

El comando que falla: ssh -v -v <username>@<server> uptime (también probé echo hello etc.)

debug1: Authentication succeeded (publickey). Authenticated to <server> (<ip>:22). debug1: channel 0: new [client-session] debug2: channel 0: send open debug1: Requesting [email protected] debug1: Entering interactive session. debug2: callback start debug2: client_session2_setup: id 0 debug2: fd 4 setting TCP_NODELAY debug1: Sending environment. debug1: Sending env LANG = en_US.UTF-8 debug2: channel 0: request env confirm 0 debug1: Sending command: uptime debug2: channel 0: request exec confirm 1 debug2: callback done debug2: channel 0: open confirm rwindow 0 rmax 32768 debug2: channel 0: rcvd adjust 2097152 debug2: channel_input_status_confirm: type 99 id 0 debug2: exec request accepted on channel 0

Y ahí cuelga, indefinidamente.

Cuando ssh sin un comando en mi servidor remoto, sin embargo, obtengo un shell interactivo y todo está bien.

Comando exitoso: ssh -v -v <username>@<server>

Salida:

debug1: Authentication succeeded (publickey). Authenticated to <server> (<ip>:22). debug1: channel 0: new [client-session] debug2: channel 0: send open debug1: Requesting [email protected] debug1: Entering interactive session. debug2: callback start debug2: client_session2_setup: id 0 debug2: fd 4 setting TCP_NODELAY debug2: channel 0: request pty-req confirm 1 debug1: Sending environment. debug1: Sending env LANG = en_US.UTF-8 debug2: channel 0: request env confirm 0 debug2: channel 0: request shell confirm 1 debug2: callback done debug2: channel 0: open confirm rwindow 0 rmax 32768 debug2: channel_input_status_confirm: type 99 id 0 debug2: PTY allocation request accepted on channel 0 debug2: channel 0: rcvd adjust 2097152 debug2: channel_input_status_confirm: type 99 id 0 debug2: shell request accepted on channel 0 Welcome! <prompt>% ...

¿Alguien tiene una idea de por qué una sesión interactiva sería exitosa pero una ejecución de comando no?

Me ha estado persiguiendo durante meses porque ya no puedo usar unison para sincronizar mis archivos (solía funcionar). Cualquier ayuda muy apreciada.


Arreglamos esto agregando -n (para redireccionar std desde / dev / null) y -t (forzar la asignación de pseudo-tty)

Ejemplo:

ssh -t -n user@host command


El problema era, de hecho, mi script de inicio de sesión, aunque no tenía que ver con requerir un terminal (sospeché eso y lo probé con las opciones -t y -T ). El problema fue que mi .bashrc estaba ejecutando un exec (en este caso para zsh , porque nuestro sistema no permite que chsh to zsh ).

La línea ofensiva:

test -f /usr/bin/zsh && exec /usr/bin/zsh

Resuelto al verificar primero la shell interactiva y salir si es así:

[ -z "$PS1" ] && return test -f /usr/bin/zsh && exec /usr/bin/zsh

Básicamente, debido a que la shell estaba ejecutando en zsh , ssh estaba esperando que esto terminara, lo que nunca sucedió.

Estoy un poco confundido de por qué se llamaba a mi .bashrc . Pensé que esto era solo para shells interactivos, pero el propósito y el orden exacto de los distintos guiones de inicio es algo que creo que nunca aprenderé.

Espero que esto pueda ser útil para otros que tienen algún tipo de exec en sus scripts de inicio.

Por cierto, las otras dos respuestas estaban en el camino correcto, así que no estaba segura de si debía "responder" o simplemente comentar sus respuestas. Si responder mi propia pregunta es moralmente incorrecto en el flujo de pila, avíseme y haré penitencia. Gracias a los otros respondedores.


Recientemente encontré un problema con los mismos síntomas, pero determiné que el problema no era un problema en mis scripts de inicio de sesión. Más bien, mi archivo .ssh/config local se configuró con RequestTTY force para el host en el que estaba intentando copiar.


Su problema probablemente se encuentra en el inicio de su shell o en los scripts de cierre de sesión del shell. Sin saber qué hay allí, es difícil adivinar el problema real.


Tuve este problema en el servidor fedora 22, después de la resolución de otros problemas nuevos.

ssh -t ziimp / bin / true estaba bien, pero no ssh ziimp / bin / true y todos mis git + ssh y scp estaban bloqueados.

La solución que encontré estaba en el archivo authorized_keys . Tuve que eliminar el prefijo de comando = "/ usr / bin / bash" de mis claves de confianza ...


Verifique los comandos en los archivos de inicio de su shell (supongo que ~/.cshrc desde su solicitud; en una sesión no interactiva, ~/.login no debería importar) que requieren un terminal por alguna razón.