
sshd
自分の環境の環境変数を新しいSSHセッションに渡すにはどうすればよいですか?
sshd
私はKubernetes Podで実行しています。 Kubernetes は、API サーバーを含むコンテナー環境でさまざまな変数を設定します。KUBERNETES_PORT=tcp://100.64.0.1:443
私の問題は、この環境変数が新しいSSHセッションに渡されず、構成に必要であることですkubectl
。
答え1
これを行うより良い方法があるかもしれませんが、簡単な方法は次のことです。SetEnv
コマンドラインの指示sshd
:
export FOO=bar
sshd ... -o "SetEnv=FOO=$FOO" ...
export FOO=foo BAR='baz quux'
sshd ... -o "SetEnv=FOO=$FOO BAR=\"$BAR\"" ...
このSetEnv
ディレクティブはOpenSSH 7.8以降でサポートされています(確認に使用sshd -V
)。すべての-o key=val
オプションと同様に最初使用します。
以前のバージョンでは、ユーザーの~/.ssh/rc
(PermitUserRC
)またはログインシェルのinitファイル:sshを介して実行されたときにbashソース~/.bashrc
(そしてそれ以前はDebianと同様のディストリビューションで/etc/bash.bashrc
)、非対話型モードで実行されている場合も同様です。[1]。
使用しないでください PermitUserEnvironment
ForceCommand
これにより、ユーザーはログインシェルとLD_PRELOAD
。
sshd
一般ユーザーとしてテストを実行する例:
t=$(mktemp -d)
ssh-keygen -qN '' -f "$t/key"
export FOO=foo BAR='baz quux'
/usr/sbin/sshd -h "$t/key" -p 2222 -o "PidFile=$t/pid" \
-o "SetEnv=FOO=\"$FOO\" BAR=\"$BAR\""
それに接続する
$ ssh -p 2222 localhost 'echo "$FOO" "$BAR"'
foo baz quux
あなたはそれを使用することができます
alias ssh0='ssh -o UserKnownHostsFile=/dev/null \
-o StrictHostKeyChecking=no -o LogLevel=ERROR'
ssh0 ...
sshがワンタイムキーの入力を求められないようにし、それを既知のホストファイルに追加します。
[1]Bashはsshによって開始されたことを確認するためにenvvarをSSH_CLIENT
チェックします。 Debianのようなディストリビューションで他のものよりも先にソースをバイパスする「動作」することができる別の方法はSHLVL
次のとおりです。PermitUserEnvironment
/etc/bash.bashrc
$ bash -xc ''
<nothing>
$ SHLVL= SSH_CLIENT=foo bash -xc ''
+ case $- in
+ return
<stuff from /etb/bash.bashrc and ~/.bashrc>