私のラップトップに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 somecommand
sshデーモンによって直接実行されるものを~/.profile
読みません。somecommand
コマンドを指定しないと、sshデーモンはログインシェルを呼び出して 。 (~/.profile
Replace~/.bash_profile
またはログインシェルによって異なります)を読みます。~/.zprofile
~/.login
非対話型コマンドの環境変数を設定する方法はいくつかありますが、すべてサーバー構成で設定する必要があり、通常はデフォルトでオフになっています。どちらの側も十分に新しいOpenSSHを持っているとします。
SendEnv
次のディレクティブを使用して、クライアントからサーバーに環境変数を送信できます。~/.ssh/config
。次のディレクティブを使用してAcceptEnv
特定の環境変数を有効にする必要があります。サーバー構成。次のように環境変数を設定できます。
~/.ssh/environment
サーバー側から。この機能は以下で有効にする必要があります。サーバー構成指示と一緒にPermitUserEnvironment
。鍵ベースの認証を使用すると仮定すると、次の各ソース変数を設定することもできます。
~/.ssh/authorized_keys
environment="FOO=bar"
:その行の先頭に追加されます。繰り返しますが、PermitUserEnvironment
サーバー構成でこのディレクティブを使用する必要があります。
サーバー構成を変更できない場合や変更しない場合は、リモートコマンドにフルパスを書き込むか、リモート.profile
コマンドにパスを明示的に指定する必要があります。
ssh [email protected] -Y '. ~/.profile; netbeans'
ssh [email protected] -Y '/path/to/netbeans'