
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から)。
答え2
私もエラーメッセージに出会いました。しかし、@Petrが提供した解決策は私には適していませんでした。環境変数の値LC_ALL
をに設定する必要があります。変数en_US.UTF-8
を設定しても効果はありません(私の考えにはすでに正しい値があるからです)。LANG
また、いくつかの説明があります。
次の日に変更を適用しました。顧客環境つまり、ローカルmosh
コマンドを実行する場所です。あなたはそうですいいえこのように変更してください。サーバー環境、接続したい場所です。
この記事を初めて発見したとき、これは私にとって直感的ではありませんでした。
また、より明確に説明すると、上記のように、私の場合はLANG
すでに設定されていますen_US.UTF-8
。ただし、他のさまざまな変数は異なる設定になっています。
LANG=en_US.UTF-8
LC_ADDRESS=nl_NL.UTF-8
LC_IDENTIFICATION=nl_NL.UTF-8
LC_MEASUREMENT=nl_NL.UTF-8
LC_MONETARY=nl_NL.UTF-8
LC_NAME=nl_NL.UTF-8
LC_NUMERIC=nl_NL.UTF-8
LC_PAPER=nl_NL.UTF-8
LC_TELEPHONE=nl_NL.UTF-8
LC_TIME=nl_NL.UTF-8
おそらく、これはmosh
アプリに多少の混乱を引き起こす可能性がありますが、ssh
これについては混乱はありません。
私の場合は、Pop!_OS 22.04クライアント環境からUnbuntu 22.04サーバー環境に接続しています。
ヒント
LC_ALL
シェル全体の変数を変更する代わりに、次のエイリアスを使用することもできます。
alias mosh="export LC_ALL=\"en_US.UTF8\" && mosh"
答え3
AskUbuntuへの答えです。私の問題を解決しました。
(この回避策は、この問題が発生したDebianサーバーユーザーのためのものであり、特定の問題とは別のものです。)マイコンピュータは、Proxmoxが処理するDebian LXコンテナです。
マイコンピュータにlocales
パッケージがインストールされていますが、再設定する必要があります。
sudo dpkg-reconfigure locales
より具体的な情報を見ることができますここ。一部のコンピュータにはこのコマンドがあるようですlocale-gen
(私のコンピュータにはありません)。