sshd環境から新しいSSHセッションに環境変数を渡す方法は?

sshd環境から新しいSSHセッションに環境変数を渡す方法は?

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/rcPermitUserRC)またはログインシェルのinitファイル:sshを介して実行されたときにbashソース~/.bashrc(そしてそれ以前はDebianと同様のディストリビューションで/etc/bash.bashrc)、非対話型モードで実行されている場合も同様です。[1]

使用しないでください PermitUserEnvironmentForceCommandこれにより、ユーザーはログインシェルと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>

おすすめ記事