mosh-server precisa de um local nativo UTF-8 para ser executado

5

Estou tentando conectar meu servidor Gentoo ao RHEL. Ambos têm mosh instalado, no entanto recebo este erro:

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.

No RHEL, tenho os seguintes locais:

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

Como posso corrigir isso?

ATUALIZAÇÃO: O problema parece estar no lado do Gentoo, conectar ao servidor debian produz o mesmo erro, conectando usando outras distribuições.

UPDATE2: corrigi-lo adicionando

LANG="en_US.UTF-8"
export LANG

em ~/.bashrc

    
por Petr 03.05.2016 / 14:33

2 respostas

4

mosh usa o ambiente de localidade suportado por ssh . Embora mosh aparentemente não tenha opções verbose ou debug, você pode dizer qual comandossh usar ao conectar e adicionando uma opção -vvv pode ter ssh mostrar quais variáveis de locale envia .

Por exemplo, começando com

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

você pode ver

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

para POSIX e

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

que mostram que o servidor confirma as variáveis usadas. O sshd remoto pode ignorar alguns de seus ambientes, dependendo da configuração de AcceptEnv na configuração de sshd - ou das configurações de SendEnv do usuário (na configuração ssh ).

Nem todos os servidores aceitam suas variáveis de localidade via ssh.

Mesmo com a configuração configurada permissivamente, ainda é possível (particularmente desde que você está se conectando ao usuário root ) que alguém decidiu que a localidade para esse usuário deveria ser POSIX. Para o root , isso faz algum sentido porque você teria menos problemas selecionando / colando a cópia.

Por exemplo, alguns sistemas usam /etc/profile.d/lang.sh para definir a localidade para uso interativo. Esse script difere de um sistema para outro e é o segundo lugar (após as configurações de ssh / sshd) a ser considerado ao procurar uma explicação sobre por que as informações de localidade não são passadas para um sistema remoto. Com o Red Hat (CentOS), o script tenta obter informações da configuração do sistema e da home, por exemplo,

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

O SuSE é diferente, fazendo suposições sobre o ssh e o gdm antes lendo essencialmente os mesmos arquivos:

#
# 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 seus servidores específicos (versão não especificada), o script pode diferir de um release para outro. Meus servidores Debian não possuem esse arquivo - e dependem da localidade do sistema padrão e do gdm (que podem ser diferentes) para definir a localidade interativa. Sua conexão ssh poderia usar um valor diferente com a localidade do sistema do que uma sessão interativa usando X (via gdm). Nesse caso, a localidade do sistema é o lugar para corrigir (veja Local no wiki do Debian).

    
por 21.05.2016 / 22:46
1

Solução Simples

user@machine:~$ LC_ALL="en_US.UTF-8" mosh-server
    
por 14.06.2018 / 18:46

Tags