[script/bash] variable environnement via ssh

Fermé
xstenz Messages postés 6 Date d'inscription mardi 29 mai 2007 Statut Membre Dernière intervention 30 mai 2007 - 29 mai 2007 à 12:52
 Totor - 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

7 réponses

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à,
2
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
2
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
29 mai 2007 à 13:12
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 ;-))
1
xstenz Messages postés 6 Date d'inscription mardi 29 mai 2007 Statut Membre Dernière intervention 30 mai 2007
29 mai 2007 à 13:40
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
29 mai 2007 à 14:30
Regarde du côté de "~/.profile".
0
xstenz Messages postés 6 Date d'inscription mardi 29 mai 2007 Statut Membre Dernière intervention 30 mai 2007
30 mai 2007 à 14:37
alors je viens de tester tout cela, résultat:

- le .profile est bien chargé lors de l'ouverture d'un shell sous l'utilisateur $USER et les variables sont bien positionnées.
donc si je me log en tant que USER admettons, le .profile est chargé.
de meme si je me log en ssh.

MAIS (et c'est la que le bas blesse sigh.. )
lorsque je veux exécuter une commande via ssh, dans ce cas le .profile n'est pas chargé.

je m'explique:
si je fais:
ssh IP_Client
(la le .profile est chargé tout va bien je peux exécuter ma commande)
env
(je voit toutes mes variables correctement positionnées)

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

Apres qques recherche, il semblerait que les fichiers qui soient chargés lors d un appel à ssh sont les suivants (si le premier n existe pas alors il charge le suivant etc..)
$HOME/.ssh/environment
$HOME/.ssh/rc
$HOME/.ssh/sshrc

après tests:
le fichier environment ne semble pas etre lu (sauf erreur de ma part mais bon..)
le fichier rc est lu
le fichier sshrc est lu si le fichier rc n existe pas.

problème, le fichier rc positionne bien les variables si je lui notifie mais à sa sortie, les variables sont effacées.
plutot logique car il me semble que la commande "export" pour les variables d environnement ne s'étend qu'aux processus fils, donc une fois terminé, celles ci sont effacées :(

bref je patauge :(

ps: pour rappel, je suis solaris 10

toutes réponses ou aides sont les bienvenues :)
0
xstenz Messages postés 6 Date d'inscription mardi 29 mai 2007 Statut Membre Dernière intervention 30 mai 2007 > xstenz Messages postés 6 Date d'inscription mardi 29 mai 2007 Statut Membre Dernière intervention 30 mai 2007
30 mai 2007 à 15:37
je me disait également que peut etre que seul le fichier $HOME/.ssh/environment pouvait peut etre établir justement les variables d'environnement mais celui-ci ne semble pas etre lu.

En effet, j'ai vu qu'il fallait activer l'option PermitUserEnvironment (à yes donc) dans /etc/ssh/sshd_config afin que cela prenne effet.

or cette option n'existe pas dans mon fichier.
je l'ai tout de meme rajoutée mais cela ne semble tjs pas fonctionner.

Dans le doute, j'ai également activé l option PermitRootLogin mais rien ne change..

J'ai également (à tout hasard) encapsulé ma commande dans un script sh et exécuté le script mais toujours aucun changement ..

:(
0
xstenz Messages postés 6 Date d'inscription mardi 29 mai 2007 Statut Membre Dernière intervention 30 mai 2007 > xstenz Messages postés 6 Date d'inscription mardi 29 mai 2007 Statut Membre Dernière intervention 30 mai 2007
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
0
bob031 Messages postés 8158 Date d'inscription samedi 7 août 2004 Statut Membre Dernière intervention 1 septembre 2014 473 > xstenz Messages postés 6 Date d'inscription mardi 29 mai 2007 Statut Membre Dernière intervention 30 mai 2007
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 !

:-))
0
xstenz Messages postés 6 Date d'inscription mardi 29 mai 2007 Statut Membre Dernière intervention 30 mai 2007 > bob031 Messages postés 8158 Date d'inscription samedi 7 août 2004 Statut Membre Dernière intervention 1 septembre 2014
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 :)
0
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"
0
Note : il est aussi possible d'utiliser la syntaxe du 'here-document', à savoir :
ssh -t <USER>@<SRV_SSH> << FIN
env
FIN
0