iniciando sshd en la primera conexión al puerto 22 con el nuevo puente de socket de advenedizo

iniciando sshd en la primera conexión al puerto 22 con el nuevo puente de socket de advenedizo

Upstart reciente tiene estas nuevas características sofisticadas similares a las de un sistema para iniciar trabajos en una conexión entrante a través de un puente de socket. Me gustaría iniciar mi sshd en la primera conexión al puerto 22.

Ahora tengo: start on socket PROTO=inet PORT=22en mi ssh.conf y tengo trabajos upstart-socket-bridge y upstart-udev-bridge ejecutándose.

El trabajo ssh comienza bien cuando me conecto a mi caja en el puerto 22, pero sshd no me responde. Es como si no lo recibiera y no pudiera aceptarlo. Volver a intentar conectarse no ayudará, incluso sshd ahora se está ejecutando y debería aceptar las conexiones normalmente. ¡Advenedizo todavía está jugando con eso!

Páginas man de eventos de socketdecir:

Cuando se detecta una conexión entrante, el descriptor de archivo que representa el socket se pasa al trabajo en cuestión para permitirle aceptar(2) la conexión. Además, la variable de entorno UPSTART_JOB contendrá el nombre del evento ("socket") y la variable de entorno UPSTART_FDS contendrá el número del descriptor de archivo correspondiente al socket de escucha.

¿Eso significa que para aprovechar esto, ssh necesita soporte específico para pasar el socket FD? Si ese es el caso, arruina toda la diversión :/

Respuesta1

El uso del puente de socket requiere un demonio parcheado que pueda manejar el socket que se le proporciona.

De man socket-event:

Cuando se detecta una conexión entrante, el descriptor de archivo que representa el socket se pasa al trabajo en cuestión para permitirle aceptar(2) la conexión. Además, la variable de entorno UPSTART_JOB contendrá el nombre del evento ("socket") y la variable de entorno UPSTART_FDS contendrá el número del descriptor de archivo correspondiente al socket de escucha.

Mientras que normalmente sshd simplemente crearía un socket y ejecutaría listen() y luego aceptar() en él, sshd solo necesita leer la variable de entorno UPSTART_FDS y aceptar() en eso.

Respuesta2

Recomiendo encarecidamente ejecutar sshd como un servicio normal en lugar de ejecutarlo bajo demanda. sshd es bastante capaz de gestionar conexiones por sí solo en todos los casos excepto en los más extremos.

Si es absolutamente necesario iniciar sshd on-demand, los siguientes comandos son útiles para solucionar problemas:

  • ps auxw | grep ssh, grep para ssh en la lista de procesos en ejecución.
  • netstat -tlp, proporciona una lista de los puertos TCP en los que un servicio está escuchando actualmente. SSH debería aparecer aquí; de lo contrario, sshd no está configurado correctamente.
  • ssh -vvv(ejecutado desde el cliente), el resultado de depuración detallado de su sesión ssh ayuda a identificar el punto de falla.
  • nmap <hostname>(ejecutado desde un cliente; requiere la instalación del paquete nmap), enumera los puertos abiertos en el host. Si SSH no aparece aquí pero sí en el netstatresultado, probablemente tengas un problema con el firewall.

información relacionada