SSH 연결에 환경 변수를 전달하고 싶습니다. 동적으로 전달되어야 하므로 ssh의 구성 파일에 하드코딩하는 것이 작동하지 않습니다.
나는 이것을 시도했습니다 :
AAA="tatata" ssh my_user@my_server.com
echo $AAA
====> (empty)
어떻게 하나요?
답변1
ssh는 (+ 및 많은 기본 구성을 TERM
통해서만 환경 변수를 전달합니다.LANG
LC_*
^1). 환경 변수를 허용하도록 서버 구성을 변경하면 심각한 결과를 초래할 수 있습니다(사용자가 로그인 셸 등을 우회할 수 있음 ForceCommand
).너 이러면 안 돼.
"원격 명령" 매개변수의 일부로 오른쪽에서 설정하고 SSH를 통해 전달하는 대신 명시적으로 대화형 로그인 셸을 시작할 수 있습니다.
ssh -t user@host AAA=tatata bash -l
이 -t
옵션을 사용하면 ssh
원격 명령을 지정할 때 기본적으로 수행되지 않는 의사 터미널을 할당할 수 있습니다. bash의 옵션 -l
은 로그인 셸을 실행하도록 하는 것, 즉 source 를 사용하도록 ~/.bash_login
하고 ssh에 대해 원격 명령 인수가 지정되지 않은 경우 실행되는 방식을 최대한 가깝게 시뮬레이션하는 것입니다.
환경 변수의 값은 로컬 및 원격 측에서 두 번 확장되므로큰따옴표그들은 이것이 금방 짜증날 수 있습니다:
ssh -t user@host PRICE=\\\$19 bash -l
그러나 구성에서 LC_*
환경 변수 통과를 허용하는 경우 변수 이름을 다음과 같이 지정할 수 있습니다 ;-)
LC_AAA=tatata ssh user@host
아니면 SSH라면고객LC_*
구성은 다음 항목에 포함되지 않습니다 SendEnv
.
LC_AAA=tatata ssh -o SendEnv=LC_AAA user@host
^1SSH를 통해 추가 환경 변수를 전달하려면 AcceptEnv
서버와 SendEnv
클라이언트 모두에 필요합니다. ssh*_config
시스템의 기본값이 무엇인지 확인하려면 다음 지시어를 찾아보세요 .