Caracteres estrangeiros não serão exibidos no SSH

15

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

Quando exibo o conteúdo da pasta pai com ls , os caracteres são escapados como "?". Talvez seja importante notar que os caracteres coreanos parecem escapar muito mais do que o número de caracteres que devem estar presentes.

Eu sei que o programa terminal que estou usando pode exibir os caracteres, pois usar sftp os exibe perfeitamente. O problema ocorre em todos os terminais que eu tentei.

Resumo das máquinas

Máquina local:

  • Linux 2.6.32-5-686, i686
  • Debian GNU / Linux 6.0.2 (squeeze)
  • 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

Eu provavelmente perdi alguma outra estatística vital ou um pouco de informação, caso em que 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.

    
por ChemicalRascal 16.07.2011 / 09:52

1 resposta

18

Suas informações locale não estão configuradas corretamente na máquina do servidor. Especificamente, a variável LC_CTYPE , que indica a codificação de caracteres no terminal, não está definida corretamente (ou, eu suspeito, em tudo).

No seu terminal local, execute locale para 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 parte .UTF-8 , indicando a codificação UTF-8 . Esta é a codificação padrão de fato para texto multilíngüe no mundo unix (e além).

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

Host *
SendEnv LC_* LANG

Isso requer que uma diretiva AcceptEnv 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 efetuar login no servidor a partir de um terminal UTF-8, adicione a linha export LC_CTYPE=en_US.UTF-8 ao seu ~/.bashrc no servidor (ou ~/.zshrc ou qualquer outro arquivo usado pelo seu shell ). O nome do local (por exemplo, en_US.UTF-8 ) deve ser um dos oferecidos por locale -a e deve ter .UTF-8 (ou .utf8 ou alguma variação trivial).

    
por 16.07.2011 / 14:56