8 votes

Attendez que SSH réussisse à créer une redirection de port.

J'appelle ssh (OpenSSH) à partir d'une application OSX/Linux-C++ via fork/exec pour créer un transfert de port dynamique. Ceci est fait en utilisant le mode batch (-o BatchMode=yes) et une clé privée qui est fournie à ssh (-i Option). L'appel SSH lui-même n'ouvre pas un Shell (Option -N).

C'est mon appel SSH complet :

ssh -N -D 9000 -o BatchMode=yes -i /path/to/private-key user@host

Je voudrais procéder à mon application dès que possible et je dois donc savoir si ssh a réussi à créer le canal. SSH lui-même ne retourne que s'il a un problème.

Existe-t-il une possibilité de détecter un transfert de port réussi ?

Bien sûr, je peux attendre que le port soit ouvert par SSH mais je cherche une solution plus élégante. Une autre solution consiste à inspecter le journal (-v) de SSH en attendant "Entering interactive Session" mais cela ne me semble pas très portable.

5voto

Utilisez le -f et l'option ssh sera mis en arrière-plan (c'est-à-dire que fork et sortir dans le processus parent), donc vous pouvez juste waitpid pour l'original ssh pour terminer et vous savez alors (sur la base du statut de sortie) que la connexion a échoué ou que le transfert de port est déjà configuré.

1voto

nob Points 193

Je pense avoir trouvé une autre solution (également pirate). Lorsque vous démarrez SSH avec

ssh -S /some/domain/socket -M ...args... host

il ne créera le socket du domaine de contrôle qu'après avoir réussi à établir la connexion. Je devrais donc attendre que le socket du domaine apparaisse dans le système de fichiers. Ce n'est pas encore très beau, mais cela semble plus robuste que d'attendre l'apparition d'une socket réseau.

Il est intéressant de noter que cela peut également être utilisé pour trouver le PID du maître (voir la réponse de R.). Utilisation de

$ ssh -S /some/domain/socket -O check host
Master running (pid=25503)

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