[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
Totor - 11 févr. 2008 à 16:05
A voir également:
- Ssh variable
- Ssh download - Télécharger - Divers Web & Internet
- Le fichier contient un programme écrit en python. le programme construit un mot secret mais il ne l'affiche pas. modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ajoutez une instruction pour faire afficher le mot secret construit. quel est ce mot secret ? ✓ - Forum Python
- Msgbox vba variable ✓ - Forum VB / VBA
- Vba range avec variable ✓ - Forum VB / VBA
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
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
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 :
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 ;-))
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
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
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
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
29 mai 2007 à 14:30
Regarde du côté de "~/.profile".
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
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 :)
- 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 :)
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
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 ..
:(
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 ..
:(
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
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
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
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
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 :
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 !
:-))
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
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 :)
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 :)
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"
exemple
profile=~/monprofile
CMD=ls
ssh $user@$machine "$profile;$CMD"