XForwardingが正しい$ PATHをロードしない

XForwardingが正しい$ PATHをロードしない

私のラップトップにnetbeansをXForwardするために次のコードを使用しようとしています。

# This does not work
$ ssh [email protected] -Y netbeans
which: no javac in (/usr/bin:/bin:/usr/sbin:/sbin)
which: no java in (/usr/bin:/bin:/usr/sbin:/sbin)
Cannot find java. Please use the --jdkhome switch.

これは機能しませんが、次のように動作します。

# This works
$ ssh [email protected] -Y
user@home $ netbeans

私の質問:

  • 最初のアプローチが失敗するのはなぜですか?
  • 最初のアプローチをどのように機能させることができますか?

ベストアンサー1

ssh example.com somecommandsshデーモンによって直接実行されるものを~/.profile読みません。somecommandコマンドを指定しないと、sshデーモンはログインシェルを呼び出して 。 (~/.profileReplace~/.bash_profileまたはログインシェルによって異なります)を読みます。~/.zprofile~/.login

非対話型コマンドの環境変数を設定する方法はいくつかありますが、すべてサーバー構成で設定する必要があり、通常はデフォルトでオフになっています。どちらの側も十分に新しいOpenSSHを持っているとします。

  • SendEnv次のディレクティブを使用して、クライアントからサーバーに環境変数を送信できます。~/.ssh/config。次のディレクティブを使用してAcceptEnv特定の環境変数を有効にする必要があります。サーバー構成

  • 次のように環境変数を設定できます。~/.ssh/environmentサーバー側から。この機能は以下で有効にする必要があります。サーバー構成指示と一緒にPermitUserEnvironment

  • 鍵ベースの認証を使用すると仮定すると、次の各ソース変数を設定することもできます。~/.ssh/authorized_keysenvironment="FOO=bar":その行の先頭に追加されます。繰り返しますが、PermitUserEnvironmentサーバー構成でこのディレクティブを使用する必要があります。

サーバー構成を変更できない場合や変更しない場合は、リモートコマンドにフルパスを書き込むか、リモート.profileコマンドにパスを明示的に指定する必要があります。

ssh [email protected] -Y '. ~/.profile; netbeans'
ssh [email protected] -Y '/path/to/netbeans'

おすすめ記事