J'ai besoin de configurer quelques tunnels ssh à 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 mon idée suivante est que le script ouvre de nouveaux onglets dans Terminal et y exécute les commandes en tant que processus de premier plan.
Remarque: cette question était à l'origine "Comment puis-je lancer un nouvel onglet de terminal à partir du shell puis y exécuter une commande?", Mais j'ai obtenu deux réponses sur le traitement des tunnels. Pour la question "ouverture d'un shell", j'ai trouvé cela sur SuperUser , qui fonctionnera, bien que de nouveaux onglets en arrière-plan soient préférables aux fenêtres de premier plan qu'il ouvre.
la source
Réponses:
Ce n'est techniquement pas une réponse à la question posée, mais plutôt une réponse à votre problème tel que décrit. La commande ssh possède deux commutateurs qui peuvent vous être utiles:
indique à ssh de rester au premier plan juste assez longtemps pour demander les mots de passe nécessaires, puis de se mettre en arrière-plan, sans exécuter de commande à distance mais simplement gérer le tunnel.
Si vous voulez vraiment que cela apparaisse dans un onglet, vous voudrez peut-être une solution différente.
la source
jobs
ni ne leurps
donne une poignée ....-f
et mettez en arrière-plan le processus via&
à la fin, vous pouvez obtenir le PID via$!
comme poignée pour tuer le processus de tunnel plus tard dans votre script.Je suggérerais simplement d'intégrer vos tunnels dans votre connexion "un pour n'importe quoi". Vous pouvez le rendre facile en ajoutant les entrées appropriées à votre
~/.ssh/config
fichier:Vous pouvez alors simplement vous connecter en exécutant:
Les tunnels devraient apparaître et commencer à fonctionner, vous laissant une seule instance SSH dans laquelle faire "quoi que ce soit". Si vous avez besoin d'ouvrir une deuxième connexion à
server2
, vous pouvez obtenir une erreur, cependant:Cela ne fait rien de mal à vos yeux. Vous pouvez également configurer ces transferts pour plusieurs serveurs en ajoutant des lignes similaires pour d'autres serveurs, et cela se produirait automatiquement.
la source