
sshd
의 환경 에서 새 SSH 세션으로 환경 변수를 전달하려면 어떻게 해야 합니까 ?
sshd
Kubernetes 포드에서 실행 중입니다 . 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_CLIENT
Bash는 및 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>