J'ai une nouvelle installation d'ubuntu 12.04. Lorsque je me connecte à mon serveur distant, j'ai des erreurs comme celle-ci:
~$ 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.
...
Je n'ai pas ce problème quand je me connecte à partir d'une ancienne installation d'ubuntu. Ceci est sorti de mon installation d'ubuntu 12.04, LANG et LANGUAGE sont définis
$ 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=
Quelqu'un sait-il ce qui a changé dans Ubuntu pour obtenir ce message d'erreur sur des serveurs distants?
Réponses:
En effet, les paramètres régionaux de votre ordinateur local sont définis sur l'allemand, ce que SSH transmet et tente d'utiliser sur le serveur, mais votre serveur ne l'a pas installé.
Vous avez plusieurs options:
Générez les paramètres régionaux . Générez les paramètres régionaux allemands sur le serveur avec
sudo locale-gen de
.Arrêtez de transférer les paramètres régionaux à partir du client . Ne transmettez pas la variable d’environnement local de votre ordinateur local au serveur. Vous pouvez commenter la
SendEnv LANG LC_*
ligne dans le fichier local/etc/ssh/ssh_config
.Arrêtez d'accepter les paramètres régionaux sur le serveur . N'acceptez pas la variable d'environnement locale de votre ordinateur local sur le serveur. Vous pouvez commenter la
AcceptEnv LANG LC_*
ligne dans le fichier distant/etc/ssh/sshd_config
.Définissez les paramètres régionaux du serveur sur anglais . Définir explicitement les paramètres régionaux sur anglais sur le serveur. Par exemple, vous pouvez ajouter les lignes suivantes à votre télécommande
~/.bashrc
ou à vos~/.profile
fichiers:Si vous ne disposez pas d'un accès root au serveur, l' option Arrêter le transfert des paramètres régionaux à partir du client est peut-être la meilleure (et la seule) solution.
la source
~/.profile
résolu mon problème. Merci.LANG
par autre chose? ..Cela peut arriver parfois lors de nouvelles installations minimales / alternatives ou dans d'autres situations. La solution est assez simple. Essayez-les, dans l’ordre suivant, en effectuant des tests après chacun pour voir si la situation est corrigée:
1. Reconfigurer les paramètres régionaux
sudo dpkg-reconfigure locales
2. Réinstallez le paquet linguistique local
sudo apt-get --reinstall install language-pack-de
3. Forcer manuellement les paramètres régionaux (persistant)
sudo update-locale LC_ALL=de_DE.UTF-8 LANG=de_DE.UTF-8
la source
Commentez la ligne
SendEnv LANG LC_*
en/etc/ssh/ssh_config
, il devrait ressembler à :la source
Le problème
Par défaut, la commande client ssh transmet les variables d'environnement liées aux paramètres régionaux au serveur SSH. C'est spécifié dans
/etc/ssh/ssh_config
le côté client:Et par défaut, le serveur SSH les accepte (
/etc/ssh/sshd_config
sur le serveur):Ainsi, si votre shell contient des variables d'environnement liées aux paramètres régionaux, elles seront renseignées dans la session SSH côté serveur.
Malheureusement, l'
SendEnv
option est cumulative . Selonman 5 ssh_config
:ce qui signifie qu'il ne peut pas être remplacé .
La solution
Il est parfois impossible ou peu judicieux de modifier une configuration à l’échelle du système, en particulier côté serveur. Cependant, vous pouvez le contourner . Et c'est l'effet secondaire de l'
-F
option dans la commande ssh. Selonman ssh
:Par défaut, le fichier de configuration par utilisateur
~/.ssh/config
est utilisé s’il existe. Mais vous pouvez explicitement le spécifier sur la ligne de commande pour ignorer/etc/ssh/ssh_config
:Ce serait plus pratique si vous faites un alias dans
~/.bashrc
:De cette façon, les
SendEnv
directives par défaut dans la configuration à l'échelle du système ne sont pas efficaces, aucune variable d'environnement n'étant envoyée au serveur SSH par défaut.la source
J'ai eu un problème similaire. Ma solution était de commenter les
SendEnv
lignes/etc/ssh/ssh_config
(car elles ne peuvent pas être remplacées) et d'ajouter l'entrée suivante dans~/.ssh/config
:avec
<somehost>
être le nom d' hôte auquel je ne veux envoyer une variable d'environnement.la source