Question Les variables de paramètres régionaux n'ont aucun effet dans le shell distant (perl: avertissement: les paramètres régionaux ont échoué.)


J'ai une nouvelle installation d'ubuntu 12.04. Quand je me connecte à mon serveur distant, j'ai des erreurs comme ceci:

~$ 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 lorsque je me connecte à partir d'une ancienne installation Ubuntu. Ceci est sorti de mon installation 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=

Est-ce que quelqu'un sait ce qui a changé dans Ubuntu pour obtenir ce message d'erreur sur les serveurs distants?


84
2018-05-30 18:51


origine


duplicata possible de Comment réparer mon problème de paramètres régionaux? - Fabby


Réponses:


En effet, votre environnement local sur votre ordinateur local est défini sur l'allemand, que SSH transmet et tente d'utiliser sur le serveur, mais votre serveur ne l'a pas installé.

Vous avez plusieurs options:

  • Générer les paramètres régionaux. Générer les paramètres régionaux allemands sur le serveur avec sudo locale-gen de.

  • Arrêtez le transfert des paramètres régionaux à partir du client. Ne transférez pas la variable d'environnement locale de votre ordinateur local vers le serveur. Vous pouvez commenter le SendEnv LANG LC_* ligne dans le local  /etc/ssh/ssh_config fichier.

  • Arrêtez d'accepter les paramètres régionaux sur le serveur. N'acceptez pas la variable d'environnement locale depuis votre ordinateur local vers le serveur. Vous pouvez commenter le AcceptEnv LANG LC_* ligne dans le éloigné  /etc/ssh/sshd_config fichier.

  • Définissez les paramètres régionaux du serveur sur anglais. Définissez explicitement les paramètres régionaux en anglais sur le serveur. Par exemple, vous pouvez ajouter les lignes suivantes à votre télécommande ~/.bashrc ou ~/.profile des dossiers:

    export LANGUAGE="en"
    export LANG="C"
    export LC_MESSAGES="C"
    

Si vous n’avez pas d’accès root au serveur, le Arrêtez le transfert des paramètres régionaux à partir du client L'option pourrait être la meilleure (et la seule) solution.


160
2018-05-30 19:19



Hah! J'ai totalement manqué le fait qu'il a énuméré le du client paramètres régionaux! Bon travail... - ish
J'ai décidé d'arrêter de transférer les paramètres régionaux à partir du client. Fonctionne bien Pour référence ultérieure: vous ne pouvez pas remplacer les paramètres SendEnv de / etc / ssh / ssh_config dans votre ~ / .ssh / config local. Voir bugzilla.mindrot.org/show_bug.cgi?id=1285 - Janning
Combiné avec bugs.php.net/bug.php?id=18556L'envoi de paramètres locaux par SSH peut causer de vrais problèmes (et causé pour moi en fait), voir bugzilla.mindrot.org/show_bug.cgi?id=1285#c9 ... - Halil Özgür
Dans mon cas, définir la locale dans ~/.profile résolu mon problème. Merci. - Francisco
Si le serveur n’a pas de paramètres régionaux allemands, pourquoi est-il acceptable qu’il écrase la valeur de LANG avec autre chose? .. - Mikhail T.


Cela peut arriver parfois sur de nouvelles installations minimales / alternatives ou dans d'autres situations. Le correctif est assez simple. Essayez-les, dans l'ordre suivant, testez après chaque test pour voir si la situation est résolue:

1. Reconfigurez les locales

  • sudo dpkg-reconfigure locales
    • si ça ne marche pas,

2. Réinstallez le module linguistique régional

  • sudo apt-get --reinstall install language-pack-de
    • si ça ne marche pas,

3. Forcer manuellement les paramètres régionaux (persistant)

  • sudo update-locale LC_ALL=de_DE.UTF-8 LANG=de_DE.UTF-8

26
2017-12-21 14:12



J'ai un problème de JVM et j'essaie de définir les paramètres régionaux du système également au 12.04. Le seul problème est que je n'arrive pas à configurer le LC_ALL, peu importe ce que j'essaie, les locales le montrent toujours vide. - Dark Star1


Commenter la ligne SendEnv LANG LC_* dans /etc/ssh/ssh_config, il devrait donc ressembler à:

#SendEnv LANG LC_*

14
2018-01-22 02:46





Le problème

Par défaut, la commande ssh client transmet les variables d'environnement liées aux paramètres régionaux au serveur SSH. C'est spécifié dans /etc/ssh/ssh_config côté client:

Host *
    SendEnv LANG LC_*

Et par défaut, le serveur SSH les accepte (dans /etc/ssh/sshd_config sur le serveur):

AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE

Donc, s'il y a des variables d'environnement liées aux paramètres régionaux dans votre shell, elles seront remplies sur la session SSH du côté serveur.

Malheureusement, le SendEnv option est cumulatif. Selon man 5 ssh_config:

 SendEnv
         ... Multiple environment variables may be separated
         by whitespace or spread across multiple SendEnv directives.  The
         default is not to send any environment variables.

ce qui signifie qu'il ne peut pas être surchargé.

La solution

Parfois, il est impossible ou imprudent de modifier une configuration à l'échelle du système, en particulier du côté du serveur. Cependant, vous pouvez contourne il. Et c'est l'effet secondaire de la -F option dans la commande ssh. Selon man ssh:

 -F configfile
         Specifies an alternative per-user configuration file.  If a con-
         figuration file is given on the command line, the system-wide
         configuration file (/etc/ssh/ssh_config) will be ignored.  The
         default for the per-user configuration file is ~/.ssh/config.

Par défaut, le fichier de configuration par utilisateur ~/.ssh/config est utilisé s'il présente Mais tu peux spécifiez-le explicitement sur la ligne de commande dériver /etc/ssh/ssh_config:

$ touch ~/.ssh/config
$ ssh -F ~/.ssh/config your_user@your_host

Ce serait plus pratique si vous créez un alias dans ~/.bashrc:

alias ssh="ssh -F ~/.ssh/config"

De cette façon, le défaut SendEnvles directives en configuration système ne sont pas efficaces, ce qui fait qu'aucune variable d'environnement n'est envoyée au serveur SSH par défaut.


7
2018-02-29 10:30



N'oubliez pas que le fichier de configuration du système dans / etc / ssh / config peut contenir des lignes supplémentaires que vous souhaitez conserver dans votre configuration utilisateur. Vous devrez les copier dans votre fichier de configuration utilisateur dans ~ / .ssh / config pour conserver ces paramètres. - Steven Maude


J'ai eu un problème similaire. Ma solution était de commenter le SendEnv lignes dans /etc/ssh/ssh_config (puisque ceux-ci ne peuvent pas être remplacés), et d'ajouter l'entrée suivante dans ~/.ssh/config:

Host *,!<somehost>
    SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
    SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
    SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE
    SendEnv XMODIFIERS    

avec <somehost> être le nom d'hôte auquel je n'a pas voulez envoyer n'importe quelle variable d'environnement.


4