Caracteres estrangeiros não serão exibidos no SSH


17

Estou tendo alguns problemas com o uso sshe um servidor remoto (ao qual não tenho acesso de administrador) - Especificamente, existem algumas pastas com texto em coreano e cirílico.

Quando eu mostro o conteúdo da pasta pai ls, os caracteres são escapados como "?". Talvez seja digno de nota que os caracteres coreanos parecem escapar muito mais do que o número de caracteres que deveriam estar lá.

Eu sei que o programa do terminal que estou usando pode exibir os caracteres, como o uso os sftpexibe perfeitamente. O problema ocorre em todos os terminais que tentei.

Resumo de máquinas

Máquina local:

  • Linux 2.6.32-5-686, i686
  • Debian GNU / Linux 6.0.2 (squeeze)
  • Ter acesso de administrador

Servidor remoto:

  • Linux 2.6.32-bpo.5-amd64, x86_64
  • Debian GNU / Linux 5.0.8 (lenny)
  • Não tem acesso de administrador nem físico

Provavelmente perdi outras estatísticas vitais ou informações, e nesse caso peço desculpas. Sou relativamente novo em todo o lado não-Windows da computação, então mal sei o que estou fazendo aqui.


2
postar a saída dos localee locale -acomandos, local e remotamente, por favor
enzotib

Thanks @enzotib - Seu comentário me levou à idéia de que os locais oferecidos podem não ser os mesmos local e remotamente.
ChemicalRascal

Respostas:


20

Suas informações de localidade não estão configuradas corretamente na máquina do servidor. Especificamente, a LC_CTYPEvariável, que indica a codificação de caracteres no terminal, não está definida corretamente (ou, desconfio).

No seu terminal local, corra localepara ver suas configurações de localidade. Você provavelmente verá (entre outras linhas) algo como LC_CTYPE=en_US.UTF-8; o que importa aqui é a .UTF-8parte, indicando a codificação UTF-8 . Esta é a codificação padrão de fato para texto multilíngue no mundo unix (e além).

Você precisa passar essas informações para o servidor. A melhor maneira, se funcionar, é enviar informações de localidade por meio da conexão ssh. Para isso, adicione as seguintes linhas no final de ~/.ssh/config:

Host *
SendEnv LC_* LANG

Isso requer que uma AcceptEnvdiretiva adequada esteja presente na configuração do servidor ( /etc/ssh/sshd_config) (é por padrão no Debian).

Se isso não funcionar, e você sempre faz login no servidor a partir de um terminal UTF-8, adicione a linha export LC_CTYPE=en_US.UTF-8ao seu ~/.bashrcno servidor ( ~/.zshrcou a qualquer arquivo que seu shell use). O nome da localidade (por exemplo en_US.UTF-8) deve ser um dos oferecidos por locale -ae deve ter .UTF-8( .utf8ou alguma variação trivial).


1
Ah! Esse seria o problema: eu "uso" o en_AU.utf8 localmente, que parecia já ter sido encaminhado para o servidor (ou, pelo menos, as localesaídas correspondentes). No entanto, locale -aremotamente forneceu apenas en_GB.utf8 e en_US.utf8. Obrigado!
ChemicalRascal

1
Para obter a codificação da localidade atual, você também pode usar:locale charmap

Meu /etc/ssh/ssh_configexigido também enviando LANG( SendEnv LANG LC_*)
Shammel Lee 15/09

E eu precisava adicionar export LC_CTYPE=en_US.UTF-8ao meu ~/.profileno lado do servidor. Adicioná-lo ~/.bashrcparecia não ter efeito.
datka
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.