Passage de variable en ssh

Résolu
palaga -  
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai un souci avec script bash lorsque je veux exécuter des commandes sur un poste distant:
Ma variable $login n'est pas connue lorsque je lance des commandes pour le serveur nommé serveur2 en ssh:

login="toto"
ssh root@serveur2 'echo $login'

Même avec un export login rien n'y fait.
Donc j'aurai voulu savoir si une variable peut être passé en paramètre quelque part ou pas.
Merci d'avance pour vos suggestions, cela m'évitera de redemander le login avant chaque ssh ...

A+
Nico.

3 réponses

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
ssh root@serveur2 'login="toto" ; echo $login'
ou
login="toto" ; ssh root@serveur2 "echo $login"
ou
login="toto" ; ssh root@serveur2 "login2=$login ; echo \$login2"
2
palaga
 
Merci beaucoup pour vos réponses !

jfr1784: je ne veux pas créer une variable mais récupérer la valeur de la var. $login pour l'utiliser dans le code qui sera exécuter sur serveur2.

dubcek: t'es le meilleur !
Les 2 derniers exemples fonctionnent très bien.

Il faut donc récupérer la valeur de la variable sur la même ligne où on se connecte via ssh !
Pour le dernier exemple où on récupère la valeur dans une nouvelle variable, peux-tu me dire pourquoi le "\" est-il nécessaire ?

Encore merci.
0
jfr1784 Messages postés 71 Date d'inscription   Statut Membre Dernière intervention   27
 
Hello palaga


login="toto"

ssh root@serveur2 touch $login

ceci créé le fichier toto sur le serveur2 dans le répertoire de root. Il ne faut pas mettre d'apostrophes et je ne crois pas que la commande echo n'ai d'effet sur une machine distante ( ceci est par contre à vérifier )

Bonne fin de journée.

JF
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
entre guillemets " le shell traite le $ et substitue la variable. Avec le \$ ce n'est pas le shell exécutant le ssh, mais le shell distant qui va exécuter la substitution de $login2, puisque login2 n'existe que dans l'environnement du shell distant
0
palaga
 
Merci pour l'explication.

A bientôt.
0
palaga > palaga
 
Juste pour corriger une connerie dite plus haut:
Pas besoin de tout mettre tout sur la meme ligne, il faut en fait utiliser les " " et non ' ':

login="toto"
ssh root@serveur2 'echo $login' MARCHE PAS

mais
login="toto"
ssh root@serveur2 "echo $login" MARCHE !
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637 > palaga
 
tu n'as rien compris, apprend avant de critiquer
0
palaga > dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention  
 
Lol, elle est pas mal celle-là !

Je me critiquais tout seul, car la connerie venait de moi. Alors ne le prends pas mal car je n'ai jamais dis que ton 2e exemple n'étais pas bon, c'est juste que je corrigeais mon erreur.

J'avais refais quelques tests avant de poster alors ça doit être mon bash qui n'a rien compris ...
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637 > palaga
 
ah désolé !! j'ai mal lu !
0