Script pour se connecter a distance en ssh - Shell/Batch - Programmation
Marsh Posté le 11-04-2007 à 16:31:53
alors ,j'ai fais ce pti script en utilisant l'outil expect.
Par contre, le mot de passe apparait en clair, donc pour la sécurité c pas le top. Il y a-t-il un moyen de le cacher ?
#!/usr/bin/expect -f
set force_conservative 1;
set timeout 3
spawn ssh 192.168.0.2
expect "password: $"
send "xxxxxx\r"
interact
Marsh Posté le 12-04-2007 à 16:36:25
maintenant jen suis a ce point là:
Le script expect 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
Marsh Posté le 13-04-2007 à 01:07:04
Tu as un mécanisme d'authenfication sans mot de passe avec ssh, il suffit de générer des clés et de paramétrer correctement côté serveur et client
Marsh Posté le 13-04-2007 à 09:49:43
couak a écrit : Tu as un mécanisme d'authenfication sans mot de passe avec ssh, il suffit de générer des clés et de paramétrer correctement côté serveur et client |
cf ssh-agent
Marsh Posté le 13-04-2007 à 09:57:07
merci de vos réponses,
vous avez raisons, expect est trop compliqué (c'est du language tcl).
En fait le truc c'est que j'aimerais que d'un poste central A, je puisse accéder aux autres postes B, C ,D,etc du réseau par ssh.
Marsh Posté le 13-04-2007 à 11:17:46
Ok, alors j'ai reussi a faire marcher la connexion auto avec ssh-agent. Pour lancer ssh-agent, je fais "ssh-agent", pour entrer mon MDP je fais "ssh-add" et la je rentre mon mdp. Ensuite quand je fais ssh pcdistant, ca marche bien, meme en arretant et en relancant le terminal.
Seulement je suis tjrs obligé de rentré ces commandes après redémarage du pc. Il y-a-t'il un moyen pour conserver l'autentification meme apres redamarrage du pc ?
Marsh Posté le 13-04-2007 à 11:37:14
J'ai encore une petite question, 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
Marsh Posté le 13-04-2007 à 11:47:27
DrOctopus a écrit : Ok, alors j'ai reussi a faire marcher la connexion auto avec ssh-agent. Pour lancer ssh-agent, je fais "ssh-agent", pour entrer mon MDP je fais "ssh-add" et la je rentre mon mdp. Ensuite quand je fais ssh pcdistant, ca marche bien, meme en arretant et en relancant le terminal. |
tu risques qd meme de faire une grosse faille de sécurité comme ca
Marsh Posté le 13-04-2007 à 11:47:53
DrOctopus a écrit : J'ai encore une petite question, voici mon script bash qui doi installer un rpm sur l'ordinateur distant: |
ssh ordi_distant "rpm -i AdobeReader.rpm"
Marsh Posté le 13-04-2007 à 11:51:36
ouep ca marche ca, bien vu, 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 ?
Marsh Posté le 13-04-2007 à 11:55:48
ssh ordi_distant "echo pouet;
rpm -i AdobeReader.rpm;
rpm -i autre.rpm;
echo fini;"
Marsh Posté le 13-04-2007 à 12:13:43
attend je te met le vrai script que je fais ca ira + vite lol:
#!/bin/bash
ssh lapp-dh187 '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.8kickstart/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... mais j'ai essayer en mettant des doubles quotes comme dans ton exemple, c'est pareil
Marsh Posté le 13-04-2007 à 13:09:38
rah la la maintenant que t'as les bases de ssh tu pouvais quand même t'imaginer des trucs sioux
Code :
|
Marsh Posté le 13-04-2007 à 13:36:01
lol oui jy avais pensé, mais bon si je fais un script, il sera situé sur la machine distante, et au niveau sécurité je n'aime pas trop ca. Pour l'erreur de tout a l'heure, il fallai mettre un \ devant le ' .
Mais j'ai une nouvelle erreur
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.8kickstart/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;'
Marsh Posté le 13-04-2007 à 14:16:52
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
Marsh Posté le 13-04-2007 à 14:22:01
il faut échapper tous les caractères spéciaux comme $, ", ...
Marsh Posté le 13-04-2007 à 14:23:20
edit : mauvais thread
Marsh Posté le 13-04-2007 à 14:26:10
ouep, il ya bien un souci au niveau de la déclaration du var. Car quand j'efface le var et que je met une autre commande comme pwd a la place,là ca marche bien. j'ai essayé de mettre var=`rpm -q Adobe`;
--> meme erreur
Marsh Posté le 13-04-2007 à 14:38:15
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
Marsh Posté le 13-04-2007 à 15:39:19
#!/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
Marsh Posté le 16-04-2007 à 09:46:51
bon 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 ?
Marsh Posté le 17-04-2007 à 12:31:16
Remplace le premier et le dernier " par un ', ou bien met un un \ devant le 2ème et l'avant dernier ".
Edit : et fais gaffe avec l'apostrophe de "n'est pas installé" aussi.
Marsh Posté le 21-04-2007 à 23:06:03
couak a écrit : rah la la maintenant que t'as les bases de ssh tu pouvais quand même t'imaginer des trucs sioux
|
non mais
ssh user@host commande |
c'est quand même mieux
Marsh Posté le 11-04-2007 à 15:28:10
Bonjour a tous,
voila je sais comment se connecter sur un pc a distance en ssh. En ligne de commande, je tape ssh -l root @ip etc...
Je peux ensuite executer n'importe quelle commande sur le pc distant.
Mais a chaque fois que je me connecte il me demande le mot de passe. J'aimerais donc savoir s'il est possible de créer un script, ou on lui passerait
les identifiants en paramètres et ensuite il éxecute les commandes qu'on veut sur le pc distant ?
merci d'avance, a bientot