IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Récupérer des valeurs d'environnement lors d'une connexion SSH


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 326
    Par défaut Récupérer des valeurs d'environnement lors d'une connexion SSH
    Bonjour à tous,

    Tout d'abord, désolé si ce topic n'est pas au bon endroit !

    Voici mon problème :
    J'exécute un programme sur un serveur qui va connecter à un ou plusieurs autres serveurs. Le programme va exécuter X commandes systèmes et X commandes SQL sur les différents "autres serveurs". Jusque là tout va bien, les connexions fonctionnent, les commandes comme pwd, ls & co passent.

    Cependant, lorsqu'un utilisateur veut passer une commande qui nécessite l'utilisation d'une variable d'environnement ça coince !

    J'ai poussé un fichier sur chaque "autre serveur" un wrapper.sh qui me permet de sourcer le .profile. Il contient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/bin/sh
     
    source ~/.profile
    Voici ma connexion en SSH :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sub connexionSSH {
      ($host) = @_;
      $ssh = Net::OpenSSH->new($host, user => $user, password => $password, master_stderr_discard => 1);
      $ssh->error and die "unable to connect to remote host  : ".$ssh->error;
    }
    Ca fonctionne pas mal cependant ça ne marche pas pour les variables d'environnement. Avez-vous une idée de comment faire ?

    Merci d'avance !

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Bonjour

    Le problème me semble être entre le clavier et la chaise. Quelqu'un veut utiliser les variables de son environnement dans un autre environnement... évidemment, ça ne marche pas. Et ce n'est pas la peine de vouloir transférer toutes les variables de son environnement ailleurs car cela ne marchera pas. Exemple: $PWD donne le répertoire courant, qui n'est pas le même distant et local.

    Il faut donc identifier et transmettre les variables que l'utilisateur souhaite avoir à disposition sur le serveur distant.

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 326
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Bonjour

    Le problème me semble être entre le clavier et la chaise. Quelqu'un veut utiliser les variables de son environnement dans un autre environnement... évidemment, ça ne marche pas. Et ce n'est pas la peine de vouloir transférer toutes les variables de son environnement ailleurs car cela ne marchera pas. Exemple: $PWD donne le répertoire courant, qui n'est pas le même distant et local.

    Il faut donc identifier et transmettre les variables que l'utilisateur souhaite avoir à disposition sur le serveur distant.
    Pour faire simple et en français, je veux m'approprier les variables d'ENV de la machine sur laquelle je veux me connecter. Et pas l'inverse.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Citation Envoyé par ciols Voir le message
    J'ai poussé un fichier sur chaque "autre serveur" un wrapper.sh qui me permet de sourcer le .profile. Il contient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/bin/sh
     
    source ~/.profile
    Il me semble que source est une commande du csh et non du sh.

    D'habitude, j'utilise . à la place de source:


  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Citation Envoyé par ciols Voir le message
    J'exécute un programme sur un serveur qui va connecter à un ou plusieurs autres serveurs. Le programme va exécuter X commandes systèmes et X commandes SQL sur les différents "autres serveurs". Jusque là tout va bien, les connexions fonctionnent, les commandes comme pwd, ls & co passent.

    Cependant, lorsqu'un utilisateur veut passer une commande qui nécessite l'utilisation d'une variable d'environnement ça coince !
    Peux-tu nous donner un exemple de commande qui coince?

    J'ai poussé un fichier sur chaque "autre serveur" un wrapper.sh qui me permet de sourcer le .profile. Il contient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/bin/sh
     
    source ~/.profile
    Jusque là, ça va...

    Voici ma connexion en SSH :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sub connexionSSH {
      ($host) = @_;
      $ssh = Net::OpenSSH->new($host, user => $user, password => $password, master_stderr_discard => 1);
      $ssh->error and die "unable to connect to remote host  : ".$ssh->error;
    }
    Euh... Excuse mon ignorance, mais qu'est-ce c'est comme langage?

    Ca fonctionne pas mal cependant ça ne marche pas pour les variables d'environnement. Avez-vous une idée de comment faire ?
    Je n'arrive pas à comprendre comment est lu/interprété ce fichier "wrapper.sh"?
    Par un shell script exécuté par ssh?

    Si oui, ce fichier "wrapper.sh" est-il correctement lu?

    Est-il exécuté ou "sourcé"?

    Qu'est-ce qui te fait dire que "ça ne marche pas pour les variables d'environnement"?

    Si tu ajoutes dans "wrapper.sh":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/sh
     
    source ~/.profile
     
    wpl=/tmp/wrapper-log.txt
    date >> "${wpl}"
    echo "La variable toto vaut ${toto}" >> "${wpl}"
    Que contient le log?

  6. #6
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 326
    Par défaut
    Merci pour ton aide jack, tu m'as aiguillé vers le problème !

    Tu vas me lyncher, le wrapper était bien présent sur les blades sauf que, il n'était jamais exécuté.

    -> Jamais exécuté, les variables ENV ne sont jamais chargées du coup.

    Pour régler le problème j'ai juste eu à rajouter la ligne suivant dans mon programme perl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ssh->capture("./wrapper.sh");
    Et la comme par magie ça a fonctionné.



    PS : La fonction de connexionSSH est en perl

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment récupérer des valeurs dans le résultats d'une commande ?
    Par Spheerys dans le forum Général Python
    Réponses: 6
    Dernier message: 22/02/2013, 11h08
  2. Récupérer des valeurs x et y d'une figure et la modifier
    Par travaildure dans le forum MATLAB
    Réponses: 8
    Dernier message: 06/07/2012, 10h44
  3. Réponses: 14
    Dernier message: 09/07/2008, 18h58
  4. Réponses: 3
    Dernier message: 23/10/2007, 13h35
  5. Réponses: 2
    Dernier message: 12/04/2006, 10h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo