[script/bash] variable environnement via ssh
xstenz
Messages postés
6
Statut
Membre
-
Totor -
Totor -
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
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
A voir également:
- Ssh variable
- Ssh download - Télécharger - Divers Web & Internet
- Vba range avec variable ✓ - Forum VB / VBA
- Variable d'environnement temp ✓ - Forum Microsoft Office
- Variable objet ou variable de bloc with non définie - Forum VB / VBA
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp - Forum Microsoft Office
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à,
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à,
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
par ailleurs, il semble que le fichier ~/.ssh/environment ne soit pas nécessaire
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 :
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 fiou encore en sourçant un des fichiers de configuration approprié :
if [ -n "$SSH_CLIENT" ]; then . /etc/profile fiA adapter ;-))
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 :)
- 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 :)
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 ..
:(
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 ..
:(
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
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
Salut,
par contre si je fait:
ssh IP_Client "env"
(la c'est le drame, elles ne le sont pas)
et si tu fait :
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 !
:-))
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 !
:-))