3 votes

démarrage de sshd sur la première connexion au port 22 avec le nouveau pont de socket de upstart

Le récent Upstart a ces nouvelles fonctionnalités fantaisistes de type systemd qui permettent de démarrer les travaux sur une connexion entrante via un pont socket. J'aimerais lancer mon sshd à la première connexion au port 22.

Je l'ai maintenant : start on socket PROTO=inet PORT=22 dans mon ssh.conf et j'ai les jobs upstart-socket-bridge et upstart-udev-bridge en cours d'exécution.

La tâche ssh démarre correctement lorsque je me connecte à ma boîte sur le port 22 mais sshd ne me répond pas. C'est comme s'il ne le recevait pas et ne pouvait pas l'accepter. Réessayer de se connecter n'aide pas, même sshd est maintenant en cours d'exécution et devrait accepter les connexions normalement. Upstart est toujours en train de s'en occuper !

Pages de manuel sur les événements de sockets dites :

Lorsqu'une connexion entrante est détectée, le descripteur de fichier représentant la socket est passé au job en question pour lui permettre de accepter(2) la connexion. De plus, la variable d'environnement UPSTART_JOB contiendra le nom de l'événement ("socket") et la balise variable d'environnement UPSTART_FDS contient le numéro du descripteur de fichier descripteur de fichier correspondant à la socket en écoute.

Cela signifie-t-il que pour en tirer parti, ssh a besoin d'un support spécifique pour passer le FD de la socket ? Si c'est le cas, cela gâche un peu tout le plaisir :/.

1voto

cqcallaw Points 1093

Je recommande fortement d'exécuter sshd comme un service normal au lieu de le lancer à la demande. sshd est tout à fait capable de gérer les connexions par lui-même dans tous les cas, sauf les plus extrêmes.

Si vous devez absolument lancer sshd à la demande, les commandes suivantes sont utiles pour le dépannage :

  • ps auxw | grep ssh Recherchez ssh dans la liste des processus en cours.
  • netstat -tlp donne une liste des ports TCP qu'un service est en train d'utiliser. écoute actuellement. SSH devrait être listé ici, si ce n'est pas le cas, sshd n'est pas configuré correctement.
  • ssh -vvv (exécuté depuis le client), la sortie de débogage détaillée de votre ssh permet de localiser le point de défaillance.
  • nmap <hostname> (exécuté à partir d'un client - nécessite l'installation de l'application nmap), liste les ports ouverts sur l'hôte. Si SSH n'est pas listé ici mais est listé dans le netstat sortie, vous avez probablement un pare-feu de pare-feu.

1voto

Jeremy Ruten Points 59989

L'utilisation du pont de socket nécessite un démon patché qui peut gérer le socket qui lui est donné.

De man socket-event :

Lorsqu'une connexion entrante est détectée, le descripteur de fichier représentant la socket est transmis au job en question pour lui permettre d'accepter(2) la connexion. De plus, la variable d'environnement UPSTART_JOB contiendra le nom de l'événement ("socket") et la variable d'environnement UPSTART_FDS contiendra le numéro du descripteur de fichier correspondant à la socket en écoute.

Alors que normalement sshd devrait simplement créer une socket et exécuter listen() puis accept() dessus, sshd a juste besoin de lire la variable d'environnement UPSTART_FDS et accepter() dessus.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X