
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].
사용하지 마세요 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>