J'essaie d'exécuter une commande sur un serveur linux distant via une commande ssh sur un serveur local, comme ceci:
ssh myremoteserver 'type ttisql'
où ttisql est un exécutable sur le chemin de ma machine distante.
Le résultat de cette opération est:
bash: ligne 0: type: ttisql: non trouvé
Quand je me connecte simplement d'abord et que je fais:
ssh myremoteserver
puis entrez la commande:
[myuser @ myremoteserver ~] $: tapez ttisql
Je retrouve le chemin de l'exe ttisql comme je m'y attendais.
La chose étrange est que quand j'exécute la première commande dans mon environnement bêta, cela fonctionne comme prévu et renvoie le chemin du fichier exe. Dans le scénario bêta, la machine A se connecte à la machine distante B, mais les deux machines sont sur site et la commande ssh se connecte rapidement à la machine distante.
Le problème survient dans notre environnement de production lorsque la machine A est locale et la machine B hors site et que la commande ssh prend une seconde ou deux pour se connecter.
La seule différence que je peux voir est le temps qu'il faut au ssh de production pour se connecter. Le chemin sur le système distant est correct car la commande fonctionne si elle est entrée après la connexion initiale.
Quelqu'un peut-il m'aider à comprendre pourquoi cette commande simple fonctionnerait dans un environnement et non dans l'autre? Le problème pourrait-il être lié au temps nécessaire pour se connecter via ssh?
Votre PATH
est configuré différemment lorsque votre shell est interactif (= lorsque vous êtes connecté au serveur) et non interactif (commandes en cours d'exécution avec ssh
).
Examinez les fichiers rc utilisés par votre shell, par exemple .bashrc
, .bash_profile
, .profile
_ (dépend de votre système). Si vous définissez PATH
au bon endroit, alors ttisql
peut fonctionner lorsque vous l'exécutez via ssh
.
Une autre solution consiste à utiliser le chemin absolu de ttisql
, il ne dépendra donc pas de votre configuration PATH
.
L’environnement peut être différent dans une session non interactive (ssh command
) à partir d'une session interactive (ssh
, puis command
). Essayez echo $PATH
dans les deux cas.
ssh myremoteserver 'echo $PATH'
contre
ssh myremoteserver
[myuser@myremoteserver~]$: echo $PATH
S'ils diffèrent, recherchez dans tous les scripts de démarrage un comportement différencié basé sur $PS1
ou $-