web-dev-qa-db-fra.com

"Commande introuvable" lors de l'utilisation de commandes SSH et non absolues

Je veux utiliser une commande sur ssh:

ssh myuser@myhost mycommand

mais cela va toujours avoir:

sh: mycommand: command not found

utiliser ci-après fonctionne évidemment:

ssh myuser@myhost /usr/local/bin/mycommand

et je comprends pourquoi: c'est parce que la commande est exécutée en quelque sorte sur une coque non-connexion.

L'utilisation de la commande complète ou de tout autre paramètre de ma commande SSH n'est pas une option dans mon scénario. Ma commande est exécutée par un script que je ne peux pas toucher et travailler sur chaque hôte, sauf celui-ci.

L'hôte qui me donne le problème est un synology NAS et le paramètre/etc/passwd pour cela Myuser est:

myuser:x:1048:100::/var/services/homes/myuser:/bin/sh

De nouveau:

Je peux:

  • ssh comme myuser dans myhost
  • exécuter en tant que myuser à l'aide du chemin absolu fourni par quel myCommand
  • exécuter MyCommand (non absolu) quand déjà sur Myhost (via SSH)

Je ne peux que de vouloir:

  • exécuter: SSH Myuser @ MyHost MyCommand (non absolu, pas de paramètres supplémentaires)
4
Simon

Probablement, votre $PATH n'inclut pas /usr/local/bin. Comme c'est SSH, il y a trois approches qui me viennent à l'esprit:

  1. Si PermitUserEnvironment est activé dans la configuration SSHD, vous devriez être capable de définir PATH in ~/.ssh/environment (c'est un fichier dans votre répertoire personnel sur le serveur - le NAS).

  2. Si vous pouvez modifier la configuration SSHD, vous devriez pouvoir utiliser SetEnv PATH=/bin:/usr/bin:/usr/local/bin (etc.) pour définir un chemin. Au moins s'il utilise OpenSSH.

  3. Il est possible que vous puissiez utiliser l'option SSH --Client'sSetEnv Option pour envoyer un chemin de serveur, en fonction de la configuration du serveur. Vous pouvez définir ceci dans votre ~/.ssh/config Fichier, sur votre ordinateur client.

Notez que les fichiers de serveur OpenSSH et de configuration du client peuvent avoir des options limitées à des clients/serveurs particuliers. Par exemple, dans la configuration du client, vous pouvez faire quelque chose comme ceci:

Host myhost
    SetEnv PATH=/bin:/usr/bin:/usr/local/bin

pour le faire seulement pour un serveur. Notez que Block continue jusqu'à ce que le prochain bloc commence (E.G, une autre Host … Block) - L'indentation est juste pour la clarté visuelle.

Les fichiers de configuration OpenSSH sont documentés dans le ssh_config et sshd_config pages manuelles.

2
derobert