~/.profile
通常ssh somecommand
、対話型sshセッション(または対話型セッションを開始する他のログイン方法)とは異なり、実行時に読み取られません。
Sshは環境変数の送信をサポートしています。OpenSSHでは、のSendEnv
ディレクティブを使用し~/.ssh/config
ます。ただし、サーバー構成のAcceptEnv
ディレクティブを使用して特定の環境変数を有効にする必要があるため、これがうまく機能しない場合があります。
OpenSSHでは、サーバー側で環境変数を設定することもできます。繰り返しますが、これは、ここではPermitUserEnvironment
ディレクティブを使用して、サーバー構成で有効にする必要があります。変数はファイルで設定できます~/.ssh/environment
。公開鍵認証を使用すると仮定すると、関連する行の先頭に~/.ssh/authorized_keys
add environment="FOO=bar"
でキーごとの変数を設定することもできます。
公開鍵認証を使用している限り、私は常にうまくいくと思う(奇妙なことに)1つのことは、ファイルのオプションを(ab)使用するcommand=
ことauthorized_keys
です。command
オプション付きのキーは、指定されたコマンドを実行する場合にのみ有効です。ただし、authorized_keys
ファイル内SSH_ORIGINAL_COMMAND
のコマンドは、ユーザーが指定したコマンドに設定された環境変数で実行されます(対話型セッションの場合は空です)。そのため、次のようなものを使用できます~/.ssh/authorized_keys
(もちろん、このキーを認証に使用しないと適用されません)。
command="export LD_LIBRARY_PATH=\"$HOME\"/lib;
if [ -n \"$SSH_ORIGINAL_COMMAND\" ]; then
eval \"$SSH_ORIGINAL_COMMAND\";
else exec \"$SHELL\"; fi" ssh-rsa …
読みやすくするために改行を上に置いていますが、実際にはすべてを1行に収める必要があります。
別の可能性は~/bin/rsync-wrapper
、サーバー上でラッパースクリプトを記述することです。
#!/bin/sh
. ~/.profile
exec rsync "$@"
次に--rsync-path='bin/rsync-wrapper'
、rsync
コマンドラインを渡します。への引数--rsync-path
はシェルによって展開されるため、必要に応じてのようなものを渡すことでrsyncコマンドラインを自己完結させることができます--rsync-path='. ~/.profile; rsync'
。
ログインシェルがbashまたはzshであることに依存する別の方法があります。Bash ~/.bashrc
は、rshdまたはsshdによって呼び出されたときに、インタラクティブではない場合でも(ただし、として呼び出された場合ではなく)常に読み取りますsh
。Zshは常に読み取ります~/.zshenv
。
## ~/.bashrc
if [[ $- != *i* ]]; then
# Either .bashrc was sourced explicitly, or this is an rsh/ssh session.
. ~/.profile
fi
## ~/.zshenv
if [[ $(ps -p $PPID -o comm=) = [rs]shd && $- != *l* ]]; then
# Not a login shell, but this is an rsh/ssh session
. ~/.profile
fi