sshd 환경의 환경 변수를 새 SSH 세션으로 어떻게 전달할 수 있습니까?

sshd 환경의 환경 변수를 새 SSH 세션으로 어떻게 전달할 수 있습니까?

sshd의 환경 에서 새 SSH 세션으로 환경 변수를 전달하려면 어떻게 해야 합니까 ?

sshdKubernetes 포드에서 실행 중입니다 . 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) 또는 로그인 셸의 초기화 파일에서: ssh를 통해 시작하면 비대화형 모드에서 실행되는 경우에도 bash 소스 ~/.bashrc(그리고 그 이전에는 데비안과 같은 배포판에서)를 사용합니다./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]SSH_CLIENTBash는 및 envvar를 확인하여 ssh에 의해 시작되었는지 확인합니다 SHLVL. 이는 PermitUserEnvironment"유용"할 수 있는 또 다른 방법입니다. /etc/bash.bashrc데비안과 유사한 배포판에서 다른 것보다 먼저 소스가 제공되는 것을 우회하는 것입니다.

$ bash -xc ''
<nothing>
$ SHLVL= SSH_CLIENT=foo bash -xc ''
+ case $- in
+ return
<stuff from /etb/bash.bashrc and ~/.bashrc>

관련 정보