SSHおよび絶対コマンド以外のコマンドを使用すると、「コマンドが見つかりません」が発生する

SSHおよび絶対コマンド以外のコマンドを使用すると、「コマンドが見つかりません」が発生する

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つの方法を考えました。

  1. sshd構成で有効になっている場合は、PermitUserEnvironmentこれを設定できる必要がありますPATH~/.ssh/environmentこれはサーバー(NAS)のホームディレクトリにあるファイルです)。

  2. SetEnv PATH=/bin:/usr/bin:/usr/local/binsshd設定を編集できる場合は、(etc)を使用してパスを設定できる必要があります。少なくともOpenSSHを使用している場合。

  3. SSHを使用できます顧客の SetEnvサーバー構成に応じてサーバーにPATHを送信するオプション。~/.ssh/configクライアントコンピュータのファイルでこれを設定できます。

OpenSSHサーバーとクライアント構成ファイルの両方は、特定のクライアント/サーバーに制限されるオプションを持つことができます。たとえば、クライアント構成で次のことができます。

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

1つのサーバーに対してのみこれを実行してください。このブロックは、次のブロック(他のHost …ブロックなど)が始まるまで続きます。インデントは視覚的な明確さのためにのみ使用されます。

OpenSSH設定ファイルは、ssh_configおよびsshd_configマニュアルページに文書化されています。

おすすめ記事