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/rc(PermitUserRC) 또는 로그인 셸의 init 파일: ssh를 통해 실행될 때 bash 소스 ~/.bashrc(그리고 그 전에는 데비안과 유사한 배포판에서 /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>

관련 정보