SSH 연결에 환경 변수 전달

SSH 연결에 환경 변수 전달

SSH 연결에 환경 변수를 전달하고 싶습니다. 동적으로 전달되어야 하므로 ssh의 구성 파일에 하드코딩하는 것이 작동하지 않습니다.

나는 이것을 시도했습니다 :

   AAA="tatata" ssh my_user@my_server.com
   echo $AAA
   ====> (empty)

어떻게 하나요?

답변1

ssh는 (+ 및 많은 기본 구성을 TERM통해서만 환경 변수를 전달합니다.LANGLC_*^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시스템의 기본값이 무엇인지 확인하려면 다음 지시어를 찾아보세요 .

관련 정보