~ / .ssh / config에서 ssh_config에 설정된 SendEnv 변수를 비활성화하는 방법


30

나는 어디에서나 그것을 찾을 수 없었기 때문에 내가 그런 문제를 겪는 유일한 사람인지 궁금합니다.

기본적으로 Red Hat 및 Debian의 ssh에는 원격 세션에서 LC * 및 LANG 변수를 전달하는 SendEnv 옵션이있는 ssh_config가 있습니다. / etc / ssh / ssh_config를 변경하는 루트가 아닌 경우 어떻게 해당 동작을 비활성화 할 수 있습니까? SendEnv 옵션이 누적 된 것으로 보이며 재설정 할 방법이 없습니다.

그리고 요청을 피하기 위해 로케일에 의존하는 스크립트 및 프로그램에 대한 부작용을 피하기 위해 로케일을 테스트 머신에 전달하지 않아야합니다.


이것은 귀하의 질문에 대한 답변이 아니지만 env랩퍼 스크립트를 통해 또는 랩퍼 스크립트 를 사용하여 테스트 시스템의 스크립트 및 프로그램을 호출하여 문제를 해결할 수 있습니까?
Scott

2
네, 해결 방법은 가능하지만 불편합니다
akostadinov

답변:


18

당신은 유일한 사람아닙니다 . 에 설명 된대로 ssh_config(5)당신은 해제 할 수 없습니다 SendEnv때문에

여러 환경 변수가 여러 SendEnv 지시문에 [...] 분산 될 수 있습니다.

테스트 머신에 루트가 있으면 AcceptEnv클라이언트가 보낸 변수를 허용하지 않도록 변경할 수 있습니다 .


4
쓰레기, 명령 줄의 -F 만 도움이 될 수 있지만 실제로 사용하기에는 너무 불편합니다. 참조 : bugzilla.mindrot.org/show_bug.cgi?id=1285
akostadinov

5

재정의 할 수 ~/.ssh/config없기 때문에이 작업을 수행 SendEnv할 수 없습니다.

ssh를 호출하는 스크립트에서는 별칭을 사용할 수 없습니다.

한 가지 대안은 함수를 내보내는 것입니다. 예 ~/.bashrc:

function ssh() {
    LANG="en_US.UTF-8" \
    LC_ADDRESS="$LANG" \
    LC_IDENTIFICATION="$LANG" \
    LC_MEASUREMENT="$LANG" \
    LC_MONETARY="$LANG" \
    LC_NAME="$LANG" \
    LC_NUMERIC="$LANG" \
    LC_PAPER="$LANG" \
    LC_TELEPHONE="$LANG" \
    LC_TIME="$LANG" \
    LC_ALL="$LANG" \
    /usr/bin/ssh $@
}
export -f ssh

1

옵션이 있습니다 . 보내기 전에 특정 값으로 SetEnv강제 설정할 수 있습니다 LANG.

또한 맨 페이지는 말합니다

앞에 패턴을 접두어로 붙여서 SendEnv 변수 이름을 지울 수 있습니다 -.

그러나 나는이 일을하지 못했습니다.


bugzilla.mindrot.org/show_bug.cgi?id=1285를 참조하십시오 -. 이 방법이 왜 작동하지 않는지 설명 합니다. ssh 구성에서 원격 LANG 및 기타 변수를 하드 코딩하는 것이 좋습니다. 상황을보다 예측 가능하게 만듭니다. SetEnv다른 사람이 그것에 대해 제안하지 않았기 때문에 아마도 새로운 지침 일 것입니다. SetEnv LANG=en_US.UTF-8
akostadinov

0

bash를 사용하는 경우 다른 서버로의 LANG 전달을 사용하지 않도록 별명 ssh = 'LANG = 명령 ssh'를 설정할 수 있습니다.


0

su - youruserssh를 통해 로그인 할 때 사용할 수 있습니다 . 그러면 사용자 환경이 다시 초기화됩니다.

실제로 새 환경으로 새 세션을 초기화합니다.


문제는 환경을 자동으로 제정하는 것입니다. 그리고 btw su가 항상 설치되는 것은 아닙니다. 그리고 su로 암호를 입력해야합니다. 유용하지 않다. 더 쉬운 해결 방법이 있습니다.
akostadinov

0

에 따르면 man ssh:

 -F configfile
         Specifies an alternative per-user configuration file.  If a con-
         figuration file is given on the command line, the system-wide
         configuration file (/etc/ssh/ssh_config) will be ignored.  The
         default for the per-user configuration file is ~/.ssh/config.

따라서 명령 행에 (기본) 구성 파일을 명시 적으로 지정하여 준수하지 않고/etc/ssh/ssh_config ssh 를 수행 할 수 ~/.ssh/config있습니다 (비어 있으면 OK).

$ touch ~/.ssh/config
$ ssh -F ~/.ssh/config your_user@your_host

에 대한 별칭을 만들 수 있습니다 ~/.bashrc:

alias ssh="ssh -F ~/.ssh/config"

bash 쉘을 다시 시작하면 다음과 같이 간단하게 ssh 할 수 있습니다.

$ ssh your_user@your_host

위의 내 의견을 참조하십시오. if one supplies on command line -F, then the system wide config is ignored according to man page에서 bugzilla.mindrot.org/show_bug.cgi?id=1285 ; 옵션이지만 실제로 원하는 기능은 아닙니다.
akostadinov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.