SSH経由でコマンドを使用したいです。
ssh myuser@myhost mycommand
しかし、これを行うと、常に次のような結果が得られます。
sh: mycommand: command not found
以下を使用すると明らかに動作します。
ssh myuser@myhost /usr/local/bin/mycommand
理由を理解します。コマンドはログインではなくシェルで実行されるためです。
私のシナリオには、コマンド全体またはsshコマンドの他のパラメータを使用するオプションはありません。私のコマンドは私が触れることができないスクリプトによって実行され、それ以外のすべてのホストで動作します。
私に問題を引き起こすホストは、Synology NASとその/etc/passwd設定です。私のユーザー例:
myuser:x:1048:100::/var/services/homes/myuser:/bin/sh
再:
私はできます:
- myuserでmyhostへのSSH接続
- 下記の絶対パスを使用してmyuserとして実行します。私のコマンドは
- すでにmyhostにある場合(ssh経由)、mycommand(絶対ではない)を実行します。
私は助けることはできませんが、欲しい:
- 実行:ssh myuser@myhost mycommand(絶対ではない、追加のパラメータなし)
ベストアンサー1
おそらくあなたのものにssh$PATH
は含まれていません/usr/local/bin
。私は3つの方法を考えました。
sshd構成で有効になっている場合は、
PermitUserEnvironment
これを設定できる必要がありますPATH
(~/.ssh/environment
これはサーバー(NAS)のホームディレクトリにあるファイルです)。SetEnv PATH=/bin:/usr/bin:/usr/local/bin
sshd設定を編集できる場合は、(etc)を使用してパスを設定できる必要があります。少なくともOpenSSHを使用している場合。SSHを使用できます顧客の
SetEnv
サーバー構成に応じてサーバーにPATHを送信するオプション。~/.ssh/config
クライアントコンピュータのファイルでこれを設定できます。
OpenSSHサーバーとクライアント構成ファイルの両方は、特定のクライアント/サーバーに制限されるオプションを持つことができます。たとえば、クライアント構成で次のことができます。
Host myhost
SetEnv PATH=/bin:/usr/bin:/usr/local/bin
1つのサーバーに対してのみこれを実行してください。このブロックは、次のブロック(他のHost …
ブロックなど)が始まるまで続きます。インデントは視覚的な明確さのためにのみ使用されます。
OpenSSH設定ファイルは、ssh_config
およびsshd_config
マニュアルページに文書化されています。