Cuando entro ssh
en uno de mis servidores, parece iniciar sesión, pero luego se cuelga antes de darme el prompt ( message debug2: shell request accepted on channel 0 is the last log entry
).
Aunque lo extraño es que ssh -t "/bin/bash"
funciona cuando ssh
no.
Lo que he descubierto hasta ahora
- Puedo iniciar sesión bien desde servidores en la misma ubicación geográfica normalmente
- Si yo
ssh -t '/bin/bash'
, puedo iniciar sesión perfectamente desde CUALQUIER ubicación. - Si lo uso
rsync
para el servidor, parece funcionar, y luego se bloquea - Si lo uso
rsync
desde el servidor, funciona sin problemas
Lo que he intentado
- eliminar o cambiar todas las opciones de inicio de sesión
.profile
,.bashrc /etc/profile
- Cambiar
ssh_config
y / osshd_config
uno de un servidor idéntico que funciona bien - He revisado la ruta
- Hice que un experto en redes examinara
tcpdump
en vano (aunque parece haber muchas retransmisiones)
Realmente no puedo pensar en otra cosa
Además de un controlador / firmware de tarjeta de red poco fiable.
match
declaración ensshd_config
? ¿Es solo una instancia desshd
ejecución?.ssh/authorized_keys
comocommand=…
? ¿Has revisado todas las reglas del firewall para ver si uno puede bloquear accidentalmente algunos paquetes SSH?/etc/profile.d/*
o/etc/bashrc
archivos.Respuestas:
Eso puede provenir de un problema en el perfil.
Cuando se conecta con
ssh -t /bin/bash
el shell no lo hará 'login', no va a la fuente de la/etc/profile
ni la~/.profile
e~/.bashrc
...Entonces, después de conectarse, coloque el shell en modo de depuración y luego busque cada archivo para encontrar lo que está bloqueando en su interior:
EDITAR
Tenga en cuenta que estaba equivocado, el archivo .bashrc se obtendrá de cualquier shell interactivo (por lo que aquí solo importan los archivos profile, profile.d).
Intente hacer la lista de las diferentes fases del proceso de conexión. Algo como esto
1) conexión ssh (config, ...)
2) inicio de sesión (PAM, tty, wtmp, ...)
3) inicio del shell (perfil, acceso al directorio de inicio, ...)
Para verificar el (1), puede iniciar el demonio sshd en modo de depuración. Para eso, debe iniciar otro sshd, escuchando un puerto dedicado (no en el puerto 22, por lo que no es necesario detener el demonio sshd normal).
Ese sshd aceptará solo una conexión y no entrará en segundo plano. Abra otra terminal y conéctese a esa sesión ssh.
Puede comparar los mensajes que recibe con los de otro servidor de la misma marca. Entonces sabrá si el problema está en el lado ssh o no.
(-ddd y -vvv son el nivel máximo de depuración, puede ajustar eso)
Tengo ese enlace , mucho más detallado.
fuente
La respuesta a mi problema Resulta que era un problema de red. Eventualmente descubrí que al soltar un poco la MTU de todas las tarjetas de red, el problema desapareció.
Lo más probable es que algo esté mal configurado para esa red, pero ahora puedo demostrarlo y entregárselo al equipo de la red (que me decía que era un problema del servidor).
Sin embargo, tenga en cuenta que este es un último recurso. La peculiaridad que tuve fue que el servidor ssh funcionaba desde la misma subred pero no fuera de ella, y ssh -t '/ bin / bash' funcionaba desde cualquier lugar.
También tenía rsyncs que comenzarían bien, pero en algún momento simplemente se cuelga o se cae la conexión.
Entonces, si está viendo esta respuesta, pruebe las otras anteriores primero, y SOLO si tiene rarezas como la mía, es probable que esto ayude.
Así que gracias por toda la ayuda. Intenté todo, y me enseñó muchas cosas, y me permitió confirmar que no tenía nada que ver con el servidor (que es todo lo que esperaba).
Así que gracias a todos los que ayudaron
fuente
Cuando lo haga
ssh some_user@some_host /bin/bash
, lo que está haciendo es lanzar some_user 's (tal como se define en/etc/passwd
el some_host ) y luego ejecutar el comando dado,/bin/bash
desde dentro de esa concha.Ahora, el shell de some_user (supongamos que también lo
bash
está) no se inicia de forma interactiva (en su lugar, ejecuta el comando dado). Por lo tanto, no asigna un pty (un pseudo-terminal ) y esto significa que no hay un pty para que el comando emitido lo use, por lo que comienza de forma no interactiva.En el ejemplo,
/bin/bash
se inicia el comando solicitado pero parece bloquearse.Puede solucionar esto pidiendo
ssh
crear una pty de todos modos para que haya una disponible para el shell y sus procesos secundarios. Esto es lo que-t
hace.También puede solucionar esto forzando el comando para crear una pty. Para
bash
, haces esto pasando una-i
discusión. La siguiente línea de comando también debería funcionar:Sin embargo, tenga en cuenta que en este último caso, el shell no puede acceder
/dev/tty
y esto genera una advertencia:Las razones de esto se explican aquí . Esto puede o no ser un problema dependiendo de lo que planeas hacer en el shell, pero usar
ssh -t
es probablemente la mejor opción.(tenga en cuenta que de
bash
todos modos puede pasar como comando porque de todos modos debería estar en la ruta del shell predeterminado del usuario)fuente
Tengo el mismo problema cuando utilicé una plataforma de virtualización anidada recientemente.
Funciona después de reducir MTU de 1500 a 1400 en el servidor de origen o de destino.
fuente