mosh-server benötigt zum Ausführen ein natives UTF-8-Gebietsschema

9

Ich versuche, eine Verbindung von meinem Gentoo zum RHEL-Server herzustellen. Beide haben moshinstalliert, aber ich bekomme diesen Fehler:

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.

Auf RHEL habe ich folgende Gebietsschemas:

# 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=

Wie kann ich das beheben?

UPDATE: Das Problem scheint auf der Gentoo-Seite zu liegen. Die Verbindung zum Debian-Server führt zu demselben Fehler. Die Verbindung mit anderen Distributionen funktioniert.

UPDATE2: Ich habe es durch Hinzufügen behoben

LANG="en_US.UTF-8"
export LANG

in ~/.bashrc

Petr
quelle
Für diejenigen, die Ubuntu oder eine Debian-ähnliche Distribution verwenden, ist hier möglicherweise eine Lösung.
Pablo A

Antworten:

6

Einfache Lösung

user@machine:~$ LC_ALL="en_US.UTF-8" mosh-server
Antonio Feitosa
quelle
Falls es nicht klar ist, kann dies auf dem Client verwendet werden:LC_ALL="en_US.UTF-8" mosh root@server
Tim Visee
3

moshVerwendet die von unterstützte Umgebung ssh. Obwohl es moshanscheinend keine ausführlichen oder Debug-Optionen gibt, können Sie ihm mitteilen, welcher sshBefehl beim Verbinden verwendet werden soll, und durch Hinzufügen einer -vvvOption kann angezeigt werden ssh, welche Gebietsschemavariablen gesendet werden .

Zum Beispiel beginnend mit

mosh -ssh='ssh -vvv' root@server

Sie könnten sehen

debug1: Sending env LC_ALL = C  
debug2: channel 0: request env confirm 0

für POSIX und

debug1: Sending env LC_CTYPE = en_US.UTF-8
debug2: channel 0: request env confirm 0

die zeigen, dass der Server die verwendeten Variablen bestätigt . Die Fernbedienung sshdignoriert möglicherweise einige Ihrer Umgebungen, abhängig von der Einstellung AcceptEnvin der Konfiguration für sshd- oder den SendEnvEinstellungen Ihres Benutzers (in Ihrer sshKonfiguration).

Nicht alle Server akzeptieren Ihre Gebietsschemavariablen über ssh.

Selbst wenn das Konfigurationssetup zulässig ist, ist es immer noch möglich (insbesondere da Sie eine Verbindung zum Root- Benutzer herstellen), dass jemand entschieden hat, dass das Gebietsschema für diesen Benutzer POSIX sein soll. Für root ist dies sinnvoll, da Sie durch Kopieren mit Auswahl / Einfügen weniger Probleme bekommen würden.

Einige Systeme verwenden beispielsweise /etc/profile.d/lang.shdas Gebietsschema für die interaktive Verwendung. Dieses Skript unterscheidet sich von System zu System und ist der zweite Ort (nach den ssh / sshd-Konfigurationen), der berücksichtigt werden muss, wenn nach einer Erklärung gesucht wird, warum Gebietsschemainformationen nicht an ein Remote-System übergeben werden. Mit Red Hat (CentOS) versucht das Skript, Informationen aus der System- und Heimkonfiguration abzurufen, z.

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 ist anders und nimmt Annahmen über ssh und gdm vor, bevor im Wesentlichen dieselben Dateien gelesen werden:

#
# 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

Für Ihre speziellen Server (Version nicht angegeben) kann das Skript von Version zu Version unterschiedlich sein. Meine Debian-Server haben diese Datei nicht - und verlassen sich auf das Standard-Gebietsschema des Systems und gdm (die sich unterscheiden können), um das interaktive Gebietsschema festzulegen. Ihre SSH-Verbindung verwendet möglicherweise einen anderen Wert für das Systemgebietsschema als eine interaktive Sitzung mit X (über GDM). In diesem Fall muss das Gebietsschema des Systems korrigiert werden (siehe Gebietsschema im Debian-Wiki).

Thomas Dickey
quelle