Los caracteres extranjeros no se mostrarán en SSH


17

Tengo algunos problemas con el uso sshy un servidor remoto (al que no tengo acceso de administrador). Específicamente, hay un par de carpetas con texto en coreano y cirílico.

Cuando visualizo el contenido de la carpeta principal con ls, los caracteres se escapan como "?". Quizás sea de notar que los caracteres coreanos parecen escapar mucho más que la cantidad de caracteres que deberían estar allí.

Sé que el programa de terminal que estoy usando puede mostrar los caracteres, ya que usarlos los sftpmuestra perfectamente. El problema ocurre en todos los terminales que he probado.

Resumen de maquinas

Máquina local:

  • Linux 2.6.32-5-686, i686
  • Debian GNU / Linux 6.0.2 (compresión)
  • Tener acceso de administrador

Servidor remoto:

  • Linux 2.6.32-bpo.5-amd64, x86_64
  • Debian GNU / Linux 5.0.8 (lenny)
  • No tengo acceso de administrador, ni físico

Probablemente me haya perdido alguna otra estadística vital o un poco de información, en cuyo caso me disculpo. Soy bastante nuevo en todo el lado de la informática que no es Windows, por lo que apenas sé lo que estoy haciendo aquí.


2
publicar el resultado de los comandos localey locale -a, tanto local como remotamente, por favor
enzotib

Gracias @enzotib: su comentario me hizo pensar que las configuraciones regionales ofrecidas podrían no ser las mismas local y remotamente.
ChemicalRascal

Respuestas:


20

Su información local no está configurada correctamente en la máquina del servidor. Específicamente, la LC_CTYPEvariable, que indica la codificación de caracteres en el terminal, no está configurada correctamente (o, sospecho, en absoluto).

En su terminal local, ejecute localepara ver su configuración regional. Probablemente verá (entre otras líneas) algo así como LC_CTYPE=en_US.UTF-8; Lo que importa aquí es la .UTF-8parte, que indica la codificación UTF-8 . Esta es la codificación estándar de facto para texto multilingüe en el mundo de Unix (y más allá).

Necesita pasar esta información al servidor. La mejor manera, si funciona, es enviar información local a través de la conexión ssh. Para esto, agregue las siguientes líneas al final de ~/.ssh/config:

Host *
SendEnv LC_* LANG

Esto requiere que una AcceptEnvdirectiva adecuada esté presente en la configuración del servidor ( /etc/ssh/sshd_config) (por defecto está en Debian).

Si eso no funciona, y siempre inicia sesión en el servidor desde un terminal UTF-8, agregue la línea export LC_CTYPE=en_US.UTF-8a su ~/.bashrcen el servidor ( ~/.zshrco cualquier archivo que utilice su shell). El nombre del entorno local (p en_US.UTF-8. Ej. ) Debe ser uno de los ofrecidos por locale -ay debe tener .UTF-8( .utf8o alguna variación trivial).


1
Ah! Ese sería el problema: "uso" en_AU.utf8 localmente, que parecía estar ya reenviado al servidor (o, al menos, las localesalidas coinciden). Sin embargo, de locale -aforma remota solo proporcionó en_GB.utf8 y en_US.utf8. ¡Gracias!
ChemicalRascal

1
Para obtener la codificación de la configuración regional actual, también puede usar:locale charmap

Mi /etc/ssh/ssh_configrequerido también enviando LANG( SendEnv LANG LC_*)
Shammel Lee

Y necesitaba agregar export LC_CTYPE=en_US.UTF-8a mi ~/.profileen el lado del servidor. Agregarlo a ~/.bashrcparecía no tener ningún efecto.
datka
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.