SSH가 LANG 환경 변수를 전달하지 않음

SSH가 LANG 환경 변수를 전달하지 않음

저는 Debian 서버를 실행 중입니다( uname -v출력 #1 SMP Debian 4.9.65-3+deb9u1 (2017-12-23)). 클라이언트에서 LANG=C전달했음에도 불구하고 여러 클라이언트(기본 SSH가 있는 macOS 10.13 노트북, iOS의 "프롬프트" 앱 등)에서 로그인할 때 . LANG=en_US.UTF-8다음은 몇 가지 관련 정보입니다.

client$ env | grep LANG
LANG=en_US.UTF-8
client$ ssh -v server
...
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
server$ env | grep LANG
LANG=C
server$ grep -in lang /etc/profile ~/.bash_profile ~/.bash_login ~/.profile ~/.bash_logout ~/.bashrc
grep: ~/.bash_profile: No such file or directory
grep: ~/.bash_login: No such file or directory
server$ locale -a
C
C.UTF-8
POSIX
en_US.utf8
server$ sudo sshd -T | grep acceptenv
acceptenv LANG
acceptenv LC_*

따라서 ssh전송 중이라고 주장 LANG하고 sshd수락 중이라고 주장하며 LANG시작 /종료 파일 LANG에 설정되어 있지 않습니다 bash.

나는 설정 ~/.profile등을 통해 이 문제를 "수정"할 수 있다는 것을 알고 있지만 환경이 제대로 전달되지 않는 이유에 더 관심이 있습니다.

편집하다:

LANG방금 macOS와 Debian에서 이름이 다르다는 것을 알았습니다 . 그러나 이것은 여전히 ​​작동하지 않습니다.

client$ LANG=en_US.utf8 ssh -v server
...
debug1: Sending environment.
debug1: Sending env LANG = en_US.utf8
server$ env | grep LANG
LANG=C

편집 2:

이러한 이름의 차이는 Mac-Linux 문제가 아닌 것으로 밝혀졌습니다. locale -a에서 사용하는 것과 다른 로케일 이름을 보고합니다 $LANG. 나는 왜 그런지 조사하려고 애쓰지 않았습니다.

답변1

내 Kubuntu 또는 Debian에는 다음과 같은 파일이 있습니다 /etc/default/locale.

#  File generated by update-locale
LANG="pl_PL.UTF-8"

다양한 파일에 언급되어 있습니다 /etc/pam.d/*. 이것은 다음의 일부입니다 /etc/pam.d/sshd.

# Read environment variables from /etc/environment and
# /etc/security/pam_env.conf.
session    required     pam_env.so # [1]
# In Debian 4.0 (etch), locale-related environment variables were moved to
# /etc/default/locale, so read that as well.
session    required     pam_env.so user_readenv=1 envfile=/etc/default/locale

지금부터man 5 pam.conf:

PAM 인식 권한 부여 애플리케이션이 시작되면 PAM-API에 대한 연결이 활성화됩니다. 이 활성화는 여러 작업을 수행하며 가장 중요한 것은 구성 파일을 읽는 것입니다: /etc/pam.conf. 또는 디렉토리의 내용일 수도 있습니다 /etc/pam.d/. 이 디렉토리가 있으면 Linux-PAM이 를 무시하게 됩니다 /etc/pam.conf.

사용자가 SSH를 통해 로그인하면 sshd포크가 발생하고 이때가 /etc/pam.d/sshd해당 작업을 수행하는 순간입니다. 보다man 8 pam_env, 환경 변수 설정/설정 해제를 담당합니다. 클라이언트로부터 변수를 수락하기 전인지 후 인지 확실하지 않아서 sshd간단한 테스트를 해봤습니다. 내 데비안 서버에서 다음 한 줄을 주석 처리했습니다.

session    required     pam_env.so user_readenv=1 envfile=/etc/default/locale

지적하신 문제는 해결되었습니다( LANG=C ssh myserver제 경우에는 테스트해 봤습니다). 해당 줄의 주석 처리를 해제했더니 문제가 다시 나타났습니다.

관련 정보