Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/04/2007, 08h52   #1
Invité de passage
 
Inscription : décembre 2006
Messages : 95
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 95
Points : 3
Points : 3
Par défaut Utilisation de expect avec ssh

Bonjour a tous
,j'ai fais ce pti script en utilisant l'outil expect. Il consiste a se connecter a un pc distant en ssh, et d'executer des commande dessus.
Par contre, le mot de passe apparait en clair, donc pour la sécurité c pas le top.
J'aimerais savoir si il y a un moyen de le cacher ?
merci d'avance

#!/usr/bin/expect -f

set force_conservative 1;

set timeout 3
spawn ssh 192.168.0.2
expect "password: $"
send "xxxxxx\r"
interact
dr_octopus74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2007, 10h42   #2
Membre à l'essai
 
Inscription : avril 2007
Messages : 24
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 24
Points : 21
Points : 21
perso je suis partisan de la connection "automatique" par ssh :o
surtout si c'est une machine sur laquelle tu te loggues souvent.
liodev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2007, 12h36   #3
Invité de passage
 
Inscription : décembre 2006
Messages : 95
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 95
Points : 3
Points : 3
merci kan meme, j'ai réglé le souci en mettant en parametre le mdp

sinon est ce que vous savez comment on peut récuperer ce qu'une commande nous retourne?
exemple:
je tape : rpm -q AdobeReader
--> ca m'affiche : AdobeReader n'est pas installé

je tape : rpm -q AdobeReader_fra
--> ca m'affiche : AdobeReader_fra-7.0.9-1

j'aimerais tester ce qu'on me retourne.
Si rpm -q AdobeReader_fra me retourne AdobeReader n'est pas installé
alors je l'installe
sinon ne rien faire.

merci d'avance
dr_octopus74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2007, 16h35   #4
Invité de passage
 
Inscription : décembre 2006
Messages : 95
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 95
Points : 3
Points : 3
maintenant jen suis a ce point là:
j'ai fais ce script en utilisant l'outil expect. Il se connecte a distance en ssh sur un pc, et lance un script nommé script2 en lui passant un parametre:

#!/usr/bin/expect -f
set force_conservative 1;
set timeout 60
spawn ssh -l root lapp-dh187
expect "password: $"
send "xxxxxx\r"
#set var 0
expect " $"
send -- "
/root/Desktop/script2 [lindex $argv 0]\r"
interact
exit

Ensuite j'ai ce 2eme script (nommé script2) en bash situé sur le pc distant. Il va tester si le rpm passé en parametre est installé ou non:
#!/bin/bash
var=$(rpm -q $1)

if [ "$var" = "le paquetage $1 n'est pas installé" ]
then
echo "installation de $1"
else
echo "$1 deja installe"
fi
exit

j'aimerais intégré le 2eme script au 1er, mais le expect ne prend pas en compte le bash (définition des variable, etc...). Je veux faire ca pour ne pas avoir de script sur l'ordinateur distant.

Y a-t-il une solution ?
merci d'avance
dr_octopus74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 11h05   #5
Rédacteur
 
Inscription : mars 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 298
Points : 1 450
Points : 1 450
le resultat d'une commande et la variable shell "system" $?
si = a 0 la commande c'est bien passé sinon erreur donc
Code :
1
2
3
4
5
6
7
8
9
10
 
rpm -q toto
echo $?
1 ==> donc erreur
if rpm -q toto
then
 echo "paquet installé"
else
 echo paquet absent
fi
__________________
Marc
Slackware for ever ......
BASH - KSH ( http://marcg.developpez.com/ksh/ )
MarcG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 11h39   #6
Invité de passage
 
Inscription : décembre 2006
Messages : 95
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 95
Points : 3
Points : 3
merci,
expect est trop compliqué (c'est du language tcl), alors j'ai changé de technique. Maintenant je me connecte automatiquement en ssh avec ssh-agent.
voici mon script bash qui doi installer un rpm sur l'ordinateur distant:

#!/bin/bash
ssh ordi_distant
rpm -i AdobeReader.rpm
exit

Mais ce c** m'installe le rpm sur mon ordinateur, et pas sur l'ordi distant! Savez vous svp comment faire pour executer les commande qui suivent "ssh" sur le pc distant ?
merci d'avance
dr_octopus74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 11h53   #7
Invité de passage
 
Inscription : décembre 2006
Messages : 95
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 95
Points : 3
Points : 3
J'ai reussi a executer des commande sur le pc distant en faisant:
#!/bin/bash
ssh ordi_distant rpm -i AdobeReader.rpm logout
exit

mai bon, je dois ecrire pas mal de truc apres la connexion ssh, il ya moyen de laisser le code en plusieurs lignes au lieu d'une seule ?
dr_octopus74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 12h15   #8
Invité de passage
 
Inscription : décembre 2006
Messages : 95
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 95
Points : 3
Points : 3
Il faut mettre des ; a la fin de chaque ligne et des doubles quote apres ssh ordi_distant:

#!/bin/bash
ssh ordi_distant 'var=$(rpm -q $1);
if [ "$var" = "le paquetage $1 n'est pas installé" ];
then;
echo "Installation de $1 en cours...";
mkdir -p /mnt/temp;
mount -o nolock -t nfs 134.158.96.8:/kickstart/utile /mnt/temp;
rpm -i /mnt/temp/$1.rpm;
umount /mnt/temp;
else;
echo "$1 deja installe";
fi;'
exit

ca me renvoi:
line 11: unexpected EOF while looking for matching `"'
line 14 syntax error: unexpected end of file
surement un soucis de quotes...
dr_octopus74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 12h22   #9
Rédacteur
 
Inscription : mars 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 298
Points : 1 450
Points : 1 450
un grand classique
Citation:
if [ "$var" = "le paquetage $1 n'est pas installé" ];
le ' entre l e est (l'est) ........ il ne faut pas ecrire avec des mots a apostrophe ! ou le proteger avec \)
__________________
Marc
Slackware for ever ......
BASH - KSH ( http://marcg.developpez.com/ksh/ )
MarcG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 13h33   #10
Invité de passage
 
Inscription : décembre 2006
Messages : 95
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 95
Points : 3
Points : 3
roooh quel inculte !! desolé

#!/bin/bash
ssh ordi_distant "var=$(rpm -q $1);
if [ "$var" = "le paquetage $1 n\'est pas installé" ];
then;
echo "Installation de $1 en cours...";
mkdir -p /mnt/temp;
mount -o nolock -t nfs 134.158.96.8:/kickstart/utile /mnt/temp;
rpm -i /mnt/temp/$1.rpm;
umount /mnt/temp;
else;
echo "$1 deja installe";
fi;"
exit

nouvelle erreur:
bash: paquetage: command not found
bash: -c: line 2: syntax error near unexpected token `then'
bash: -c: line 2: `then;'
dr_octopus74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 14h17   #11
Invité de passage
 
Inscription : décembre 2006
Messages : 95
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 95
Points : 3
Points : 3
tin ca me soule,
je test la commande sur une seule ligne sur mon pc (pas distant):
#!/bin/bash
var=$(rpm -q $1);if [ "$var" = "le paquetage $1 nest pas installé" ];then echo "Installation de $1 en cours...";mkdir /root/Desktop/REPERTOIRE;else echo "$1 deja installe";fi;
exit
ca marche, mais bon il me créer le repertoire sur mon pc

et si je met cette grosse commande apres le ssh ordi_distant:
#!/bin/bash
ssh ordi_distant" var=$(rpm -q $1);if [ "$var" = "le paquetage $1 nest pas installé" ];then echo "Installation de $1 en cours...";mkdir /root/Desktop/REPERTOIRE;else echo "$1 deja installe";fi;"
exit
bash: -c: line 0: unexpected EOF while looking for matching `''
bash: -c: line 1: syntax error: unexpected end of file
dr_octopus74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 14h38   #12
Invité de passage
 
Inscription : décembre 2006
Messages : 95
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 95
Points : 3
Points : 3
ca s'améliore un poil, ce script marche:
#!/bin/bash
ssh ordi_distant "var=0;
if [ $var=0 ];
then mkdir /root/Desktop/REPERTOIRE;
else echo pouet;
fi;"
exit

me reste plus qu'a trouver un moyen de recuperer le resultat de la commande rpm -q XXX.rpm
dr_octopus74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 15h39   #13
Invité de passage
 
Inscription : décembre 2006
Messages : 95
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 95
Points : 3
Points : 3
#!/bin/bash
ssh ordi_distant '
var=`rpm -q $1`;
if [ $var="le paquetage nest pas installé" ];
then mkdir /root/Desktop/REPERTOIRE;
else echo pouet;
fi;
echo "le parametre est:"$1;'
exit

le recois en résultat:
rpmq: aucun argument fournit à la requete
le paramètre est:

Je suis sur le pc A, et je veux me connecter au pc B pour y créer le repertoire /root/Desktop/REPERTOIRE.
Donc je lance le script sur le pc A avec un parametre, mais en fait, le script se connecte au pc B et attend un parametre provenant du shell du pc B.
Donc en gros ma question est: comment dois-je faire pour donner un parametre sur le shell du pc A, pour qu'il soit reconnu dans la partie ssh du script ?
je sais c'est un peu tordu mais je n'ai pas pu mieux expliquer
dr_octopus74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 09h48   #14
Invité de passage
 
Inscription : décembre 2006
Messages : 95
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 95
Points : 3
Points : 3
Voici mon dernier probleme en date, donc oubliez tout les autres lol
J'ai fais ce pti script qui va voir si le paquetage passé en paramètre est installé ou non:

#!/bin/bash
ssh ordi_disant "
var=$(rpm -q $1);
if [ $var="le paquetage nest pas install" ];
then echo pasinstalle;
else echo $var;
fi;"
exit

me renvois:
bash: -c: line 1: unexpected EOF while looking for matching `''
bash: -c: line 6: syntax error: unexpected end of file

si je met des simple quote autour de <le paquetage nest pas install>, ca me renvoit:
bash: -c: line 2: unexpected EOF while looking for matching `''
bash: -c: line 6: syntax error: unexpected end of file
bizarre non ?
dr_octopus74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h18.


 
 
 
 
Partenaires

Hébergement Web