
SSH接続に環境変数を渡したいです。動的に渡す必要があるため、sshの設定ファイルにハードコードすることは機能しません。
私はこれを試しました:
AAA="tatata" ssh my_user@my_server.com
echo $AAA
====> (empty)
どうすればいいですか?
答え1
sshは(+と多くの基本設定TERM
を介してのみ環境変数を渡します。LANG
LC_*
^1)。環境変数を許可するようにサーバー構成を変更すると、重大な結果が生じる可能性があります(ユーザーはログインシェルなどをバイパスする可能性がありますForceCommand
)。あなたはこれをしないでください。。
「リモートコマンド」パラメータの一部として右側に設定してSSH経由で渡すのではなく、明示的に対話型ログインシェルを起動できます。
ssh -t user@host AAA=tatata bash -l
この-t
オプションを使用すると、ssh
リモートコマンドを指定したときにデフォルトで実行されない擬似端末を割り当てることができます。 bashのオプション-l
はログインシェルを実行することです。つまり、sourceを使用し、~/.bash_login
sshにリモートコマンド引数が指定されていない場合の実行方法をできるだけ近づけることです。
環境変数の値はローカル側とリモート側で2回拡張されるため二重引用符彼らはこれがすぐに迷惑になることができます:
ssh -t user@host PRICE=\\\$19 bash -l
ただし、設定でLC_*
環境変数を渡すことができる場合は、変数名を次のように指定できます;-)
LC_AAA=tatata ssh user@host
またはSSHなら顧客LC_*
設定は次の項目には含まれませんSendEnv
。
LC_AAA=tatata ssh -o SendEnv=LC_AAA user@host
^1SSHを介して追加の環境変数を渡すには、AcceptEnv
サーバーとSendEnv
クライアントの両方に必要です。ssh*_config
システムのデフォルト値が何であるかを確認するには、次のディレクティブを参照してください。