GentooからRHELサーバーに接続しようとしています。どちらもインストールmosh
されていますが、次のエラーが発生します。
petanb@localhost ~/Documents $ mosh root@server
mosh-server needs a UTF-8 native locale to run.
Unfortunately, the local environment ([no charset variables]) specifies
the character set "US-ASCII",
The client-supplied environment ([no charset variables]) specifies
the character set "US-ASCII".
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
Connection to server closed.
/usr/bin/mosh: Did not find mosh server startup message.
RHEL には次のロケールがあります。
# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
この問題をどのように解決できますか?
更新:問題はGentoo側にあるようです。 Debian サーバーに接続すると同じエラーが発生し、他のディストリビューションと接続しても問題はありません。
アップデート2:追加して問題を解決しました。
LANG="en_US.UTF-8"
export LANG
入力する~/.bashrc
ベストアンサー1
mosh
冗長なオプションやデバッグオプションは明らかではssh
ありませんが、接続時に使用するコマンドをmosh
知らせることができ、オプションを追加するとロケール変数にそれを表示させることができます。ssh
-vvv
ssh
送る。
例えば、
mosh -ssh='ssh -vvv' root@server
あなたは見ることができます
debug1: Sending env LC_ALL = C
debug2: channel 0: request env confirm 0
POSIXの場合
debug1: Sending env LC_CTYPE = en_US.UTF-8
debug2: channel 0: request env confirm 0
これはサーバーです確認する使用される変数。リモコンは、sshd
構成設定またはユーザー設定(設定)によっては、一部の環境を無視できます。AcceptEnv
sshd
SendEnv
ssh
すべてのサーバーがSSHを介してロケール変数を受け入れるわけではありません。
構成設定が許可されていてもまだ可能です(特に次に接続しているため)。根user)は、誰かがユーザーのロケールがPOSIXでなければならないと判断したことを示します。 ~のため根、選択/貼り付けでコピーするのが難しいので、意味があります。
たとえば、一部のシステムは、対話型の使用のためにロケールを設定するために使用されます/etc/profile.d/lang.sh
。このスクリプトは、システムによって異なり、リモートシステムに渡されないロケール情報の説明を見つけるとき(ssh / sshd構成以降)考慮する必要がある2番目の場所です。 Red Hat(CentOS)の場合、スクリプトはシステムと基本構成から情報を取得しようとします。たとえば、次のようになります。
if [ -n "$LANG" ]; then
saved_lang="$LANG"
[ -f "$HOME/.i18n" ] && . "$HOME/.i18n" && sourced=1
LANG="$saved_lang"
unset saved_lang
else
for langfile in /etc/locale.conf "$HOME/.i18n" ; do
[ -f $langfile ] && . $langfile && sourced=1
done
fi
SuSEは異なり、sshとgdmを想定しています。今後本質的に同じファイルを読む:
#
# lang.sh: Set interactive language environment
#
# Used configuration files:
#
# /etc/sysconfig/language
# $HOME/.i18n
#
#
# Already done by the remote SSH side
#
test -z "$SSH_SENDS_LOCALE" || return
#
# Already done by the GDM
#
test -z "$GDM_LANG" || return
特定のサーバー(バージョンが指定されていない)の場合、スクリプトはバージョンごとに異なる場合があります。私のDebianサーバーにはこのファイルがなく、デフォルトのシステムロケールとgdm(異なる場合があります)を使用して対話型ロケールを設定します。 Xの対話型セッション(gdm経由)を使用する代わりに、SSH接続はシステムロケールとは異なる値を使用できます。この場合は、システムロケールを変更する必要があります(参照:ロケールDebian Wikiから)。