Bonjour,
J'ai cherché un peu partout mais je ne trouve pas de solution à mon problème :
J'ai un script bash qui doit ouvrir un tunnel via SSH vers une autre machine puis exécuter des commandes qui y feront transiter des infos par ce tunnel. Jusque là, pas de souci, j'utilise la commande suivante :
Code :
- /usr/bin/ssh -f -L 7777:127.0.0.1:7777 user@192.168.0.1 sleep 5
|
Le -f permet à SSH de passer en arrière plan après la mise en place du tunnel (je suis donc assuré que le tunnel est en place lorsque les commandes exécutées après SSH sont exécutées, chose qui ne serait pas possible avec un & ).
Le problème est que je souhaite avoir une authentification automatique avec mot de passe (et sans utiliser de clé). La seule solution semble être l'utilisation d'expect pour injecter le mot de passe via la commande "send". Or, si ceci fonctionne parfaitement dans le cas d'un accès SSH classique (pour taper des commandes à distance), ceci ne fonctionne pas lorsqu'on souhaite exécuter SSH en arrière plan (pour un tunnel par exemple).
J'ai essayé avec le script de base suivant :
Code :
- #!/usr/bin/expect
- set force_conservative 1
- spawn /usr/bin/ssh -f -L 7777:127.0.0.1:7777 user@192.168.0.1 sleep 5
- expect "password: $"
- send "monmotdepasse\r"
|
- Résultat : SSH est tué quelque soit la valeur mise à "sleep"
- En ajoutant "interact" à la fin, SSH n'est pas tué mais le script se retrouve bloqué pendant les n secondes du sleep malgré le -f . Chose étrange : en regardant la liste des processus, j'ai un SSH zombi qui se balade en plus du SSH que j'ai lancé.
- Si je supprime le -f en laissant "interact" : le processus zombi disparait mais le script reste bloqué (là, c'est logique !)
Existe-t'il un moyen d'envoyer SSH en arrière plan tout en faisant un login automatique sans clé avec expect et de manière synchronisée ?
Merci d'avance
Message édité par The Mauler le 16-11-2010 à 09:26:11