Tengo una nueva instalación de ubuntu 12.04. Cuando me conecto a mi servidor remoto recibí errores como este:
~$ 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.
...
No tengo este problema cuando me conecto desde una instalación anterior de ubuntu. Este es el resultado de mi instalación de ubuntu 12.04, LANG y LANGUAGE están configurados
$ 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=
¿Alguien sabe qué ha cambiado en ubuntu para obtener este mensaje de error en servidores remotos?
Respuestas:
Esto se debe a que su configuración regional en su máquina local está configurada en alemán, que SSH reenvía e intenta usar en el servidor, pero su servidor no lo tiene instalado.
Tienes varias opciones:
Generar la localización . Genere la configuración regional alemana en el servidor con
sudo locale-gen de
.Deje de reenviar la configuración regional desde el cliente . No reenvíe la variable de entorno local desde su máquina local al servidor. Puede comentar la
SendEnv LANG LC_*
línea en el archivo local/etc/ssh/ssh_config
.Deje de aceptar la configuración regional en el servidor . No acepte la variable de entorno local de su máquina local al servidor. Puede comentar la
AcceptEnv LANG LC_*
línea en el archivo remoto/etc/ssh/sshd_config
.Establezca la configuración regional del servidor en inglés . Establezca explícitamente la configuración regional en inglés en el servidor. Como ejemplo, puede agregar las siguientes líneas a su control remoto
~/.bashrc
o~/.profile
archivos:Si no tiene acceso de root al servidor, la opción de Detener el reenvío desde el cliente podría ser la mejor (y única) forma de hacerlo.
fuente
~/.profile
resolvió mi problema. Gracias.LANG
con otra cosa? ..Esto puede suceder a veces en instalaciones nuevas mínimas / alternativas o en otras situaciones. La solución es bastante simple. Pruebe estos, en el siguiente orden, probando después de cada uno para ver si la situación está arreglada:
1. Reconfigurar locales
sudo dpkg-reconfigure locales
2. Vuelva a instalar el paquete de idioma de locale
sudo apt-get --reinstall install language-pack-de
3. Forzar manualmente la configuración regional (persistente)
sudo update-locale LC_ALL=de_DE.UTF-8 LANG=de_DE.UTF-8
fuente
Comentario la línea
SendEnv LANG LC_*
en/etc/ssh/ssh_config
, por lo que debe el siguiente aspecto:fuente
El problema
De forma predeterminada, el comando del cliente ssh reenvía las variables de entorno relacionadas con la configuración regional al servidor SSH. Eso se especifica en
/etc/ssh/ssh_config
el lado del cliente:Y de forma predeterminada, el servidor SSH los acepta (en
/etc/ssh/sshd_config
el servidor):Por lo tanto, si hay variables de entorno relacionadas con la configuración regional en su shell, se completarán en la sesión SSH en el lado del servidor.
Lamentablemente, la
SendEnv
opción es acumulativa . De acuerdo aman 5 ssh_config
:lo que significa que no se puede anular .
La solución
A veces es imposible o imprudente cambiar una configuración de todo el sistema, especialmente en el lado del servidor. Sin embargo, puede evitarlo . Y ese es el efecto secundario de la
-F
opción en el comando ssh. De acuerdo aman ssh
:Por defecto, el archivo de configuración por usuario
~/.ssh/config
se usa si se presenta. Pero puede especificarlo explícitamente en la línea de comando para omitir/etc/ssh/ssh_config
:Sería más conveniente si crea un alias en
~/.bashrc
:De esta forma, las
SendEnv
directivas predeterminadas en la configuración de todo el sistema no son efectivas, por lo que no se envían variables de entorno al servidor SSH de forma predeterminada.fuente
Tuve un problema similar. Mi solución fue comentar las
SendEnv
líneas en/etc/ssh/ssh_config
(ya que no se pueden anular) y agregar la siguiente entrada en~/.ssh/config
:con
<somehost>
ser el nombre de host al que no quería enviar ninguna variable de entorno.fuente