20 votes

Comment gérer les tunnels en tant que processus d'arrière-plan à partir d'un shell script ?

J'ai besoin de mettre en place un couple de ssh-tunnels à partir d'un script shell. J'ai essayé de les exécuter en tant que tâches bg en utilisant :

#!/bin/sh
ssh -L 3000:server1:5029 me@server2 &
ssh -L 3001:server3:3306 me@server2 &

mais les tunnels ne semblent pas fonctionner correctement lorsque je les lance de cette façon.

Ils fonctionnent bien lorsque je les configure manuellement dans leurs propres onglets, donc ma prochaine idée est de faire en sorte que le script ouvre de nouveaux onglets dans Terminal et exécute les commandes dans ces derniers en tant que processus de premier plan.

Note : Cette question était à l'origine "Comment lancer un nouvel onglet de terminal à partir du shell et exécuter une commande dans celui-ci ?", mais j'ai reçu deux réponses concernant la gestion des tunnels. Pour la question "ouvrir un shell", j'ai trouvé ceci sur SuperUser qui fonctionnera, bien que les nouveaux onglets en arrière-plan soient préférables aux fenêtres de premier plan qu'il ouvre.

28voto

zzz Points 1686

Techniquement, il ne s'agit pas d'une réponse à la question posée, mais plutôt d'une réponse à votre problème tel que décrit. La commande ssh possède deux commutateurs qui peuvent vous être utiles :

ssh -f -N -L 3000:server1:5029 me@server2

demande à ssh de rester en avant-plan juste assez longtemps pour demander les mots de passe nécessaires, puis de se placer en arrière-plan, n'exécutant aucune commande à distance mais gérant simplement le tunnel.

Si vous voulez vraiment qu'il apparaisse dans un onglet, il vous faut une autre solution.

7voto

roo Points 3294

Je suggérerais de simplement intégrer vos tunnels dans votre connexion "un pour tout". Vous pouvez le faire facilement en ajoutant les entrées appropriées dans votre fichier ~/.ssh/config fichier :

Host server2
    HostName 10.1.1.1
    User me
    LocalForward 3000 127.0.0.1:5029
    LocalForward 3001 127.0.0.1:3306

Vous pouvez alors simplement vous connecter en exécutant :

> ssh server2

Les tunnels devraient apparaître et commencer à fonctionner, vous laissant avec une seule instance SSH dans laquelle vous pouvez faire "n'importe quoi". Si vous avez besoin d'ouvrir une seconde connexion à server2 vous risquez cependant d'obtenir une erreur :

> ssh server2
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 3000
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 3001
Could not request local forwarding.

Cela ne fait pas mal, sauf pour vos yeux. Vous pouvez également configurer ces renvois pour plusieurs serveurs en ajoutant des lignes similaires pour d'autres serveurs, et tout se fera automatiquement.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X