Les caractères étrangers ne s'affichent pas dans SSH

17

J'ai des problèmes avec l'utilisation d' sshun serveur distant (auquel je n'ai pas accès administrateur) - Plus précisément, il y a quelques dossiers avec du texte coréen et cyrillique.

Lorsque j'affiche le contenu du dossier parent avec ls, les caractères sont échappés par "?". Il est peut-être intéressant de noter que les caractères coréens semblent s'échapper beaucoup plus que le nombre de caractères qui devraient y être.

Je sais que le programme terminal que j'utilise peut afficher les caractères, car l'utilisation les sftpaffiche parfaitement. Le problème se produit sur tous les terminaux que j'ai essayés.

Résumé des machines

Machine locale:

  • Linux 2.6.32-5-686, i686
  • Debian GNU / Linux 6.0.2 (compression)
  • Avoir un accès administrateur

Serveur distant:

  • Linux 2.6.32-bpo.5-amd64, x86_64
  • Debian GNU / Linux 5.0.8 (lenny)
  • Pas d'accès administrateur, ni physique

J'ai probablement manqué une autre statistique vitale ou un peu d'information, auquel cas je m'excuse. Je suis assez nouveau pour tout le côté non Windows de l'informatique, donc je sais à peine ce que je fais ici.

ChemicalRascal
la source
2
publier la sortie des commandes localeet locale -a, à la fois localement et à distance, s'il vous plaît
enzotib
Merci @enzotib - Votre commentaire m'a donné l'idée que les paramètres régionaux proposés pourraient ne pas être les mêmes localement et à distance.
ChemicalRascal

Réponses:

20

Vos informations locales ne sont pas configurées correctement sur la machine serveur. Plus précisément, la LC_CTYPEvariable, qui indique l'encodage des caractères sur le terminal, n'est pas définie correctement (ou, je suppose, pas du tout).

Dans votre terminal local, exécutez localepour voir vos paramètres régionaux. Vous verrez probablement (entre autres lignes) quelque chose comme LC_CTYPE=en_US.UTF-8; ce qui importe ici, c'est la .UTF-8partie indiquant le codage UTF-8 . Il s'agit du codage standard de facto pour le texte multilingue dans le monde Unix (et au-delà).

Vous devez transmettre ces informations au serveur. La meilleure façon, si cela fonctionne, est d'envoyer des informations locales via la connexion ssh. Pour cela, ajoutez les lignes suivantes à la fin de ~/.ssh/config:

Host *
SendEnv LC_* LANG

Cela nécessite qu'une AcceptEnvdirective appropriée soit présente dans la configuration du serveur ( /etc/ssh/sshd_config) (c'est par défaut sur Debian).

Si cela ne fonctionne pas et que vous vous connectez toujours au serveur à partir d'un terminal UTF-8, ajoutez la ligne export LC_CTYPE=en_US.UTF-8à votre ~/.bashrcsur le serveur ( ~/.zshrcou tout autre fichier utilisé par votre shell). Le nom des paramètres régionaux (par exemple en_US.UTF-8) doit être l'un de ceux proposés par locale -a, et doit avoir .UTF-8( .utf8ou une variation triviale).

Gilles 'SO- arrête d'être méchant'
la source
1
Ah! Ce serait le problème: j'utilise "en_AU.utf8 localement, qui semblait déjà être transmis au serveur (ou, au moins, les localesorties correspondent). Cependant, à locale -adistance n'a donné que en_GB.utf8 et en_US.utf8. Merci!
ChemicalRascal
1
Pour obtenir l'encodage des paramètres régionaux actuels, vous pouvez également utiliser:locale charmap
Mon /etc/ssh/ssh_configrequis également l'envoi LANG( SendEnv LANG LC_*)
Shammel Lee
Et je devais ajouter export LC_CTYPE=en_US.UTF-8à mon ~/.profilecôté serveur. L'ajouter à ~/.bashrcsemble n'avoir aucun effet.
datka