ssh 및 '경고: setlocale: LC_CTYPE: 로케일을 변경할 수 없음(UTF-8): 해당 파일 또는 디렉토리가 없음'

1989 단어 linuxsshosx
이 게시물은 오늘날 인터넷 검색을 통해 상당히 널리 퍼진 것으로 보이는 문제에 관한 것이며 이에 대해 많은 혼란이 있습니다. 나는 그것에 대해 상당히 잘 이해했다고 생각하므로 혼란을 없애기 위해 이 블로그 게시물을 만들었습니다.

이 게시물은 ssh를 사용하여 Linux 시스템에 로그인할 때 Mac OSX에 업데이트를 적용한 후 다음과 같은 두려운 라인이 발생하는 경우에 대한 것입니다.

warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory


이것은 단지 메시지일 뿐이며 계속 진행할 수 있습니다. 그러나 "로케일"(언어별)을 사용하는 대부분은 작동을 중지하거나 오류를 생성할 수 있습니다. 이것은 혼란스러운 부분입니다. 작업을 즉시 중단하지 않기 때문에 실제 충돌(예: perl 충돌)이 무작위로 나타날 수 있습니다.

나는 클라이언트에서 패칭을 할 때 처음으로 발생했습니다. 패치는 상황이 다운되는 것을 의미하므로 시간에 민감합니다. 그래서 정말 답답했습니다. 나는 근본 원인을 찾았고 이것을 내가 패치하고 있는 소프트웨어 공급업체에 제공했으며 공급업체는 이를 비공개 문제 데이터베이스에 넣었고 아무 조치도 취하지 않은 지원 엔지니어가 공로를 인정했습니다.

그래서 여기서 무슨 일이 일어나고 있습니까? 이것은 원격 서버에서 세션이 생성되는 방식에 대해 많은 유연성을 허용하는 ssh(보안 셸) 메커니즘과 OSX 패치 시 되돌려지는 일부 설정 때문에 발생합니다. 메시지를 다시 살펴보겠습니다.

warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory


LC_CTYPE은 리눅스가 무언가를 설정하도록 합니다. LC_CTYPE에 대한 환경을 쿼리해 보겠습니다.

$ env | grep LC_CTYPE
LC_CTYPE=UTF-8


그래서 그 이유입니다. 그런데 왜 갑자기 설정이 된 것 같죠?

그 이유는 ssh 클라이언트와 원격 ssh 서버에 로그인과 함께 환경 설정을 보낼 수 있는 'SendEnv'라는 ssh 설정 때문입니다.

그럼 갑자기 이게 왜 뜨는 걸까요? 그 이유는 /etc/ssh/ssh_config 에 mac에 글로벌 ssh 클라이언트 설정 파일이 있기 때문입니다. OSX가 업데이트될 때마다 이 파일이 다시 작성됩니다. 음, 아주 정확하게 말하자면, 저는 이 파일을 변경하지 않습니다. 적어도 글로벌 호스트 선언(Host *)은 환경 변수 LANG 및 모든 LC 변수SendEnv LANG LC_*를 OSX 업데이트 시 전송하도록 변경됩니다. 모든 단일 업데이트.

그것을 해결하는 방법? 지금까지 내가 찾은 실행 가능한 유일한 해결책은 단순히 LC_* 를 제거하는 것이므로 /etc/ssh/ssh_config 의 줄은 SendEnv LANG 이 됩니다.
~/.ssh/config 에 사용자별 ssh_config 파일이 있지만 해당 파일을 사용하면 SendEnv 에 환경 변수를 추가할 수만 있고 제거할 수는 없는 것 같습니다.
/etc/ssh/sshd_config 라는 파일도 있습니다. 즉, sshd(데몬) 구성이므로 로컬 OSX ssh 서버의 구성이므로 클라이언트에 대한 설정이 아닙니다.

좋은 웹페이지 즐겨찾기