Posez votre question Signaler

[script/bash] variable environnement via ssh

xstenz 6Messages postés 29 mai 2007Date d'inscription - Dernière réponse le 11 févr. 2008 à 16:05
Bonjour,
alors voici mon problème:
Lorsque je me connecte en ssh de mon client à mon serveur, les variables d'environnement définie ne sont pas rechargées.
Je m'explique: en tapant env ou ssh IP_Serveur "env" les valeurs retournées sont les mêmes bien que définies différemment dans le /etc/profile de chaque machine.
Il me semble que lorsque l'on se connecte en ssh, un fichier de configuration est chargé, chargeant par la même occasion des variables d'environnement mais j'ignore si c'est effectivement le cas et si oui, quel est ce fichier.
Note importante: je suis sous Solaris10 (émulé sur un vmware server)
Ma question: Ou dois je modifier (définir?) mes variables pour que celles-ci soient effective lors d'un appel via ssh.
Cordialement
Lire la suite 

[script/bash] variable environnement via ssh »

12 réponses
Réponse
+1
moins plus
Salut,

Tout simplement dans le fichier de configuration de ton $USER (.bashrc par exemple) en y mettant un truc du genre pour définir des variables :
if [ -n "$SSH_CLIENT" ]; then
VAR="bla bla bla"
export VAR
fi 
ou encore en sourçant un des fichiers de configuration approprié :
if [ -n "$SSH_CLIENT" ]; then
. /etc/profile
fi
A adapter ;-))
Ajouter un commentaire
Réponse
+1
moins plus
J'ai été confronté au même probème et j'y ai passé l'après midi.
J'ai pu trouvé une autre solution :

1/ Sur le serveur ssh, vérifier la présence de l'option "PermitUserEnvironment yes"
2/ Sur le serveur ssh, créer le fichier $USER/.ssh/environment (dans mon cas, j'ai fais un lien symbolique avec un fichier existant)
3/ sur le poste client, utiliser la syntaxe suivante :
echo 'commande(s)_a_executer'|ssh -t <USER>@<SRV_SSH>

l'option -t est sensée forcer la création d'un tty mais il y a tout de même l'erreur suivante :
"Pseudo-terminal will not be allocated because stdin is not a terminal."
on peut ne pas l'afficher en forcant la redirection du fd 2 (2>/dev/null en fin de ligne) car l'option -q n'y change rien, du moins dans mon cas.

j'ai testé echo 'env'|ssh -t <USER>@<SRV_SSH> et ça le fait ;)

voilà,
Ajouter un commentaire
Réponse
+1
moins plus
Bon alors en fait, il faut mettre -T et non -t pour éviter d'avoir le message : "Pseudo-terminal will not be allocated because stdin is not a terminal."

par ailleurs, il semble que le fichier ~/.ssh/environment ne soit pas nécessaire
Ajouter un commentaire
Réponse
+0
moins plus
je te remercie je vais voir ça :)

mais il me semble qu'il n'y a pas de .bashrc ou .login sous solaris, si tu as une idée d'ou se situe les fichiers de configuration du $USER ;)

merci encore
Ajouter un commentaire
Réponse
+0
moins plus
Regarde du côté de "~/.profile".
xstenzxstenz - 30 mai 2007 à 17:31
bon alors voila une solution "bricolage" qui fonctionne:

ssh $IP _CLIENT "script.sh"

dans script.sh, commencer par . ~/.profile (apres le #!/bin/bash et avant les commandes à exécuter)

dans le .profile, définir les variables d'environnement souhaitées et cela fonctionne.

plusieurs pbs cependant:
1) solution non générique, dépend du .profile du USER (ou alors créer un fichier dans /etc/ssh par exemple qui sera appelé par les divers utilisateurs, à moins qu un fichier générique existe déjà mais je ne l ai pas vu..)
2) je n'ai toujours pas réussi à comprendre le pourquoi du comment du fait que mon fichier $HOME/.ssh/environment n est pas exécuté et cela pourrait être embétant par la suite.
3) ce n'est pas propre toussa... :(

enfin bref si qqun a des idées je suis toujours preneur :D
bob031xstenz - 30 mai 2007 à 17:47
Salut,

par contre si je fait:
ssh IP_Client "env"
(la c'est le drame, elles ne le sont pas)


et si tu fait :
ssh IP_Client "le/chemin/complet/env"


c'est d'après ce que j'ai lu et que je te reporte ci-dessous :
8.5 ssh
ssh possède sa propre variable PATH, à laquelle il ajoute le répertoire où se trouve ssh. Cela implique souvent que le répertoire /usr/bin se retrouve en double :
/usr/local/bin:/usr/bin:/bin:.:/usr/bin
La variable PATH ne contient pas /usr/bin/X11 et le shell invoqué par ssh n'est pas un login shell. Ainsi, la commande
ssh hote_distant xterm
ne marchera pas et rien de ce qui est contenu dans /etc/profile ou /etc/csh.cshrc ne pourra changer cela. Vous devrez toujours utiliser des chemins absolus, par exemple /usr/bin/X11/xterm.


Mais comme je n'y connais rien, peut-être suis-je à côté de la plaque !

:-))
xstenz- 30 mai 2007 à 17:59
env est simplement une commande permettant d afficher les variables d'environnement et leur valeurs.
Du coup je ne pense pas que spécifier le chemin ait une incidence.. enfin je crois ^^
mais merci pour l'info, je l ignorais :)
Ajouter un commentaire
Réponse
+0
moins plus
lancer une commande via ssh il faut bien avant la commande charger le fichier d'environnement voulu:
exemple

profile=~/monprofile
CMD=ls
ssh $user@$machine "$profile;$CMD"
Ajouter un commentaire
Réponse
+0
moins plus
Note : il est aussi possible d'utiliser la syntaxe du 'here-document', à savoir :
ssh -t <USER>@<SRV_SSH> << FIN
env
FIN
Ajouter un commentaire
Ce document intitulé « [script/bash] variable environnement via ssh » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?