Ich habe eine neue Ubuntu 12.04-Installation. Wenn ich eine Verbindung zu meinem Remote-Server herstelle, erhalte ich folgende Fehler:
~$ ssh example.com sudo aptitude upgrade
...
Traceback (most recent call last):
File "/usr/bin/apt-listchanges", line 33, in <module>
from ALChacks import *
File "/usr/share/apt-listchanges/ALChacks.py", line 32, in <module>
sys.stderr.write(_("Can't set locale; make sure $LC_* and $LANG are correct!\n"))
NameError: name '_' is not defined
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = "de_DE.UTF-8",
LC_MONETARY = "de_DE.UTF-8",
LC_ADDRESS = "de_DE.UTF-8",
LC_TELEPHONE = "de_DE.UTF-8",
LC_NAME = "de_DE.UTF-8",
LC_MEASUREMENT = "de_DE.UTF-8",
LC_IDENTIFICATION = "de_DE.UTF-8",
LC_NUMERIC = "de_DE.UTF-8",
LC_PAPER = "de_DE.UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_ALL to default locale: No such file or directory
No packages will be installed, upgraded, or removed.
0 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B of archives. After unpacking 0 B will be used.
...
Ich habe dieses Problem nicht, wenn ich eine Verbindung von einer älteren Ubuntu-Installation herstelle. Dies wird von meiner Ubuntu 12.04 Installation ausgegeben, LANG und LANGUAGE sind eingestellt
$ locale
LANG=de_DE.UTF-8
LANGUAGE=de_DE:en_GB:en
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC=de_DE.UTF-8
LC_TIME=de_DE.UTF-8
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=
Weiß jemand, was sich in Ubuntu geändert hat, um diese Fehlermeldung auf Remote-Servern zu erhalten?
Antworten:
Dies liegt daran, dass Ihr Gebietsschema auf Ihrem lokalen Computer auf Deutsch festgelegt ist, was SSH weiterleitet und versucht, auf dem Server zu verwenden, auf Ihrem Server ist es jedoch nicht installiert.
Sie haben mehrere Möglichkeiten:
Generieren Sie das Gebietsschema . Generieren Sie das deutsche Gebietsschema auf dem Server mit
sudo locale-gen de
.Stoppen Sie die Weiterleitung des Gebietsschemas vom Client . Leiten Sie die Umgebungsvariable für das Gebietsschema nicht von Ihrem lokalen Computer an den Server weiter. Sie können die
SendEnv LANG LC_*
Zeile in der lokalen/etc/ssh/ssh_config
Datei auskommentieren.Akzeptieren Sie das Gebietsschema auf dem Server nicht mehr . Akzeptieren Sie die Umgebungsvariable für das Gebietsschema von Ihrem lokalen Computer zum Server nicht. Sie können die
AcceptEnv LANG LC_*
Zeile in der Remote-/etc/ssh/sshd_config
Datei auskommentieren.Setzen Sie das Gebietsschema des Servers auf Englisch . Setzen Sie das Gebietsschema auf dem Server explizit auf Englisch. Als Beispiel können Sie Ihrer Fernbedienung
~/.bashrc
oder Ihren~/.profile
Dateien die folgenden Zeilen hinzufügen :Wenn Sie keinen Root-Zugriff auf den Server haben, ist die Option " Weiterleiten des Gebietsschemas vom Client aus beenden" möglicherweise der beste (und einzige) Weg.
quelle
~/.profile
mein Problem gelöst. Vielen Dank.LANG
mit etwas anderem überschreiben ?Dies kann manchmal bei neuen Minimal- / Alternativinstallationen oder in anderen Situationen vorkommen. Das Update ist ziemlich einfach. Probieren Sie diese in der folgenden Reihenfolge nacheinander aus, um festzustellen, ob die Situation behoben ist:
1. Konfigurieren Sie die Ländereinstellungen neu
sudo dpkg-reconfigure locales
2. Installieren Sie das Sprachpaket für das Gebietsschema neu
sudo apt-get --reinstall install language-pack-de
3. Manuelles Erzwingen von Gebietsschemaeinstellungen (dauerhaft)
sudo update-locale LC_ALL=de_DE.UTF-8 LANG=de_DE.UTF-8
quelle
Kommentieren Sie die Zeile
SendEnv LANG LC_*
in/etc/ssh/ssh_config
, so sollte es so aussehen:quelle
Das Problem
Standardmäßig leitet der Befehl ssh client länderspezifische Umgebungsvariablen an den SSH-Server weiter. Das ist in
/etc/ssh/ssh_config
auf der Client-Seite angegeben:Und standardmäßig akzeptiert der SSH-Server sie (
/etc/ssh/sshd_config
auf dem Server):Wenn sich in Ihrer Shell auf das Gebietsschema bezogene Umgebungsvariablen befinden, werden diese in die SSH-Sitzung auf der Serverseite übernommen.
Leider ist die
SendEnv
Option kumulativ . Nachman 5 ssh_config
:was bedeutet, dass es nicht überschrieben werden kann .
Die Lösung
Manchmal ist es unmöglich oder unklug, eine systemweite Konfiguration zu ändern, insbesondere auf der Serverseite. Sie können es jedoch umgehen . Und das ist der Nebeneffekt der
-F
Option im Befehl ssh. Nachman ssh
:Standardmäßig wird die benutzerspezifische Konfigurationsdatei
~/.ssh/config
verwendet, falls vorhanden. Sie können es jedoch explizit in der Befehlszeile angeben, um es zu umgehen/etc/ssh/ssh_config
:Es wäre praktischer, wenn Sie einen Alias erstellen in
~/.bashrc
:Auf diese Weise sind die Standardanweisungen
SendEnv
in der systemweiten Konfiguration nicht wirksam, sodass standardmäßig keine Umgebungsvariablen an den SSH-Server gesendet werden.quelle
Ich hatte ein ähnliches Problem. Meine Lösung bestand darin, die
SendEnv
Zeilen in/etc/ssh/ssh_config
(da diese nicht überschrieben werden können) zu kommentieren und den folgenden Eintrag in hinzuzufügen~/.ssh/config
:mit
<somehost>
der Host - Name sein, der ich nicht jede Umgebungsvariable senden möchten.quelle