Debianサーバーを実行しています(_uname -v
_ output #1 SMP Debian 4.9.65-3+deb9u1 (2017-12-23)
)。いくつかのクライアント(デフォルトのsshを備えたmacOS 10.13ラップトップ、iOSの「プロンプト」アプリなど)のいずれかからログインすると、クライアントから_LANG=C
_を渡したにもかかわらず、_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
_で使用されているものとは異なるロケールの名前を報告します。私はその理由をわざわざ調査していません。
私の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
がフォークするかどうかわからなかったので、簡単なテストを行いました。私はDebianサーバーでこの1行をコメントアウトしました:
session required pam_env.so user_readenv=1 envfile=/etc/default/locale
あなたが指摘した問題は修正されました(私の場合はLANG=C ssh myserver
でテストされました)。その行のコメントを外すと、問題が再発しました。