mosh-server necesita un entorno local UTF-8 para ejecutarse

9

Estoy intentando conectarme desde mi Gentoo al servidor RHEL. Ambos se han moshinstalado, sin embargo, aparece este error:

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.

En RHEL tengo las siguientes configuraciones regionales:

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

¿Cómo puedo arreglar esto?

ACTUALIZACIÓN: El problema parece estar en el lado de Gentoo, conectarse al servidor Debian produce el mismo error, conectarse usando otras distribuciones funciona.

ACTUALIZACIÓN2: lo arreglé agregando

LANG="en_US.UTF-8"
export LANG

dentro ~/.bashrc

Petr
fuente
Para aquellos que usan Ubuntu o cualquier Debian como distro, aquí puede haber una solución.
Pablo A

Respuestas:

6

Solución simple

user@machine:~$ LC_ALL="en_US.UTF-8" mosh-server
Antonio Feitosa
fuente
En caso de que no esté claro, esto se puede usar en el cliente:LC_ALL="en_US.UTF-8" mosh root@server
Tim Visee
3

moshusa el entorno local compatible con ssh. Si bien moshaparentemente no tiene opciones detalladas o de depuración, puede decirle qué sshcomando usar al conectarse y al agregar una -vvvopción puede sshmostrar qué variables de configuración regional envía .

Por ejemplo, comenzando con

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

es posible que vea

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

para POSIX y

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

que muestran que el servidor confirma las variables que se utilizan. El control remoto sshdpuede ignorar parte de su entorno dependiendo de la configuración de AcceptEnvla configuración de sshd- o la configuración de su usuario SendEnv(en su sshconfiguración).

No todos los servidores aceptan sus variables locales a través de ssh.

Incluso con la configuración de configuración permisiva, aún es posible (particularmente porque se está conectando al usuario raíz ) que alguien haya decidido que la configuración regional para ese usuario debe ser POSIX. Para root , eso tiene algún sentido porque se metería en menos problemas al seleccionar / pegar la copia.

Por ejemplo, algunos sistemas utilizan /etc/profile.d/lang.shpara establecer la configuración regional para uso interactivo. Esa secuencia de comandos difiere de un sistema a otro, y es el segundo lugar (después de las configuraciones ssh / sshd) a tener en cuenta al buscar una explicación de por qué la información regional no se pasa a un sistema remoto. Con Red Hat (CentOS), el script intenta obtener información de la configuración del sistema y del hogar, por ejemplo,

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 es diferente, haciendo suposiciones sobre ssh y gdm antes de leer esencialmente los mismos archivos:

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

Para sus servidores particulares (versión no especificada), el script puede diferir de una versión a otra. Mis servidores Debian no tienen ese archivo, y dependen de la configuración regional predeterminada del sistema y gdm (que pueden diferir) para establecer la configuración regional interactiva. Su conexión ssh podría usar un valor diferente con la configuración regional del sistema que una sesión interactiva usando X (a través de gdm). En ese caso, la configuración regional del sistema es el lugar para arreglar (consulte Configuración regional en la wiki de Debian).

Thomas Dickey
fuente