
私は Debian サーバー (uname -v
出力#1 SMP Debian 4.9.65-3+deb9u1 (2017-12-23)
) を実行しています。複数のクライアント (デフォルトの ssh を備えた macOS 10.13 ラップトップ、iOS の「Prompt」アプリなど) のいずれかからログインすると、クライアントから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
などでこれを「修正」できることはわかっていますが、環境が適切に渡されない理由のほうが興味深いです。
編集:
macOS と Debian では名前が異なることに気付きましたLANG
。ただし、これはまだ機能しません。
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
クライアントから変数を受け入れる前か後かはわからなかったので、簡単なテストを行いました。Debian サーバーで次の 1 行をコメント アウトしました。
session required pam_env.so user_readenv=1 envfile=/etc/default/locale
ご指摘の問題は修正されました (LANG=C ssh myserver
私の場合はテスト済み)。その行のコメントを解除したところ、問題が再発しました。