web-dev-qa-db-fra.com

Exécute la commande sur le serveur distant via ssh

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?

35
jlteksolutions

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.

22
janos

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 $-

25
damienfrancois