Fremde Zeichen werden in SSH nicht angezeigt

17

Ich habe einige Probleme mit der Verwendung sshund einem Remote-Server (auf den ich keinen Administratorzugriff habe). Insbesondere befinden sich dort einige Ordner mit koreanischem und kyrillischem Text.

Wenn ich den Inhalt des übergeordneten Ordners mit anzeige ls, werden die Zeichen als "?" Vielleicht ist zu beachten, dass die koreanischen Zeichen weit mehr als die Anzahl der Zeichen, die dort sein sollten , zu entkommen scheinen .

Ich weiß, dass das Terminalprogramm, das ich verwende, die Zeichen so anzeigen kann, wie sftpsie perfekt angezeigt werden. Das Problem tritt auf allen Terminals auf, die ich ausprobiert habe.

Maschinenübersicht

Lokale Maschine:

  • Linux 2.6.32-5-686, i686
  • Debian GNU / Linux 6.0.2 (Squeeze)
  • Haben Sie Administratorzugriff

Remote-Server:

  • Linux 2.6.32-bpo.5-amd64, x86_64
  • Debian GNU / Linux 5.0.8 (Lenny)
  • Sie haben weder Administratorzugriff noch physischen Zugriff

Ich habe wahrscheinlich eine andere wichtige Statistik oder Information verpasst. In diesem Fall bitte ich um Entschuldigung. Ich bin ziemlich neu auf der ganzen Nicht-Windows-Seite des Computing, daher weiß ich kaum, was ich hier mache.

ChemicalRascal
quelle
2
Posten Sie die Ausgabe der Befehle localeund locale -a, sowohl lokal als auch remote, bitte
enzotib
Vielen Dank @enzotib - Ihr Kommentar hat mich auf die Idee gebracht, dass die angebotenen Gebietsschemas lokal und remote möglicherweise nicht identisch sind.
ChemicalRascal

Antworten:

20

Ihre Gebietsschemainformationen sind auf dem Servercomputer nicht korrekt eingerichtet. Insbesondere ist die LC_CTYPEVariable, die die Kodierung von Zeichen auf dem Terminal angibt, nicht richtig eingestellt (oder, wie ich vermute, überhaupt nicht).

Führen Sie localein Ihrem lokalen Terminal den Befehl aus , um Ihre Ländereinstellungen anzuzeigen. Sie werden wahrscheinlich (unter anderem) so etwas sehen LC_CTYPE=en_US.UTF-8; Was hier zählt, ist der .UTF-8Teil, der die UTF-8- Codierung angibt . Dies ist die De-facto-Standardcodierung für mehrsprachigen Text in der Unix-Welt (und darüber hinaus).

Sie müssen diese Informationen an den Server übergeben. Der beste Weg, wenn es funktioniert, ist das Senden von Gebietsschemainformationen über die ssh-Verbindung. Fügen Sie dazu am Ende folgende Zeilen hinzu ~/.ssh/config:

Host *
SendEnv LC_* LANG

Dies setzt voraus, dass eine geeignete AcceptEnvDirektive in der Serverkonfiguration ( /etc/ssh/sshd_config) vorhanden ist (standardmäßig unter Debian).

Wenn dies nicht funktioniert und Sie sich immer von einem UTF-8-Terminal aus am Server anmelden, fügen Sie die Zeile export LC_CTYPE=en_US.UTF-8zu Ihrer ~/.bashrcauf dem Server (oder einer von ~/.zshrcIhrer Shell verwendeten Datei) hinzu. Der Name des Gebietsschemas (z. B. en_US.UTF-8) muss einer der Namen sein, die von angeboten werden locale -a, und muss .UTF-8( .utf8oder eine geringfügige Variation) aufweisen.

Gilles 'SO - hör auf böse zu sein'
quelle
1
Ah! Das wäre das Problem: Ich "benutze" lokal die Datei en_AU.utf8, die anscheinend bereits an den Server weitergeleitet wurde (oder zumindest die localeAusgaben stimmten überein). Allerdings locale -agab die Ferne nur en_GB.utf8 und en_US.utf8. Vielen Dank!
ChemicalRascal
1
Um die Codierung des aktuellen Gebietsschemas locale charmap
Meine /etc/ssh/ssh_configerforderlich auch senden LANG( SendEnv LANG LC_*)
Shammel Lee
Und ich musste export LC_CTYPE=en_US.UTF-8meine ~/.profileauf der Serverseite hinzufügen . Das Hinzufügen zu ~/.bashrcschien keine Wirkung zu haben.
Datum