L’ordinateur que je suis (p) ssh’ing peut-il afficher différent de l’original $ PATH dans certaines circonstances?

J’utilise cet outil appelé pssh à ssh dans un certain nombre d’hôtes ensemble

La syntaxe à utiliser est la suivante:

pssh [OPTIONS] command [...] 

Par exemple:

 pssh -h hosts.txt uptime 

Ici, hosts.txt est le fichier contenant les adresses IP de tous mes hôtes. La commande mentionnée ci-dessus fonctionne correctement. Même si je remplace le temps de disponibilité par ls, cela fonctionne bien et me montre le contenu correct de tous les fichiers sur les machines respectives.

Le problème est que si je remplace cette commande par echo $ PATH, cela me montre mon chemin

Si j’utilise cette commande:

 pssh -h ips.txt which java 

alors pour tous les hôtes il me montre cette erreur:

 which: no java in (/usr/local/bin:/bin:/usr/bin) 

Et si je ssh juste dans UN des hôtes manuellement en utilisant la commande ssh normale ()

et j’exécute la commande quelle ou voir la variable $ PATH, alors est-ce que voir ceci:

 -bash-3.2$ echo $PATH /home/xx/bin64:/home/xx/bin:/usr/kerberos/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin -bash-3.2$ which java /home/xx/bin/java -bash-3.2$ 

Cela montre donc qu’au moins une machine est installée sur Java et que le bon chemin est configuré. Alors, quelqu’un peut-il me dire pourquoi je ne peux pas faire fonctionner cette commande pour tous les hôtes?

Le ou les serveurs auxquels vous vous connectez définissent probablement un $PATH différent selon que le shell exécuté à distance est un login ou un shell interactif ou non. Lorsque vous appelez ssh de manière interactive, un shell de connexion interactif est appelé sur le serveur. Lorsque vous exécutez ssh de manière non interactive, un shell non interactif et non connecté est appelé (avec une option -c pour exécuter directement la commande spécifiée sans passer en mode interactif).

De nombreux shells génèrent des fichiers de démarrage différents selon qu’ils sont appelés en tant que shells de connexion et / ou shells interactifs. Par exemple, bash lit ~/.profile (ou ses variantes) uniquement lorsqu’il s’agit d’un shell de connexion, et ~/.bashrc uniquement lorsqu’il s’agit d’un shell intractif. Le serveur configure probablement un $PATH qui inclut le répertoire pour Java de l’un de ces fichiers de démarrage.

La solution consiste à configurer des variables d’environnement comme $PATH partir de /etc/environment au lieu des fichiers de démarrage du shell.