Saya memiliki instalasi ubuntu 12.04 yang baru. Ketika saya terhubung ke server jarak jauh saya, saya mendapat kesalahan seperti ini:
~$ 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.
...
Saya tidak memiliki masalah ini ketika saya terhubung dari instalasi ubuntu yang lebih lama. Ini adalah output dari instalasi ubuntu 12.04 saya, LANG dan LANGUAGE disetel
$ 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=
Adakah yang tahu apa yang telah berubah di ubuntu untuk mendapatkan pesan kesalahan ini di server jauh?
Jawaban:
Itu karena lokal Anda di mesin lokal Anda diatur ke Jerman, yang SSH maju dan coba gunakan pada server, tetapi server Anda tidak menginstalnya.
Anda punya beberapa opsi:
Hasilkan lokal . Hasilkan lokal Jerman di server dengan
sudo locale-gen de
.Hentikan penerusan lokal dari klien . Jangan teruskan variabel lingkungan lokal dari mesin lokal Anda ke server. Anda dapat mengomentari
SendEnv LANG LC_*
baris dalam file lokal/etc/ssh/ssh_config
.Berhenti menerima lokal di server . Jangan terima variabel lingkungan lokal dari mesin lokal Anda ke server. Anda dapat mengomentari
AcceptEnv LANG LC_*
baris dalam file jarak jauh/etc/ssh/sshd_config
.Tetapkan lokal server ke Bahasa Inggris . Secara eksplisit mengatur lokal ke Bahasa Inggris di server. Sebagai contoh, Anda dapat menambahkan baris berikut ke remote
~/.bashrc
atau~/.profile
file Anda:Jika Anda tidak memiliki akses root ke server, berhenti penerusan lokal dari opsi klien mungkin cara terbaik (dan hanya) untuk pergi.
sumber
~/.profile
memecahkan masalah saya. Terima kasih.LANG
dengan sesuatu yang lain? ..Ini dapat terjadi kadang-kadang pada pemasangan minimal / alternatif segar atau dalam situasi lain. Cara mengatasinya cukup sederhana. Coba ini, dalam urutan berikut, pengujian setelah masing-masing untuk melihat apakah situasinya sudah diperbaiki:
1. Konfigurasi ulang lokal
sudo dpkg-reconfigure locales
2. Instal ulang paket bahasa lokal
sudo apt-get --reinstall install language-pack-de
3. Secara manual memaksa pengaturan lokal (persisten)
sudo update-locale LC_ALL=de_DE.UTF-8 LANG=de_DE.UTF-8
sumber
Komentar garis
SendEnv LANG LC_*
di/etc/ssh/ssh_config
, jadi seharusnya terlihat seperti:sumber
Masalah
Secara default, perintah ssh client meneruskan variabel lingkungan terkait-lokal ke server SSH. Itu ditentukan di
/etc/ssh/ssh_config
sisi klien:Dan secara default, server SSH menerima mereka (masuk
/etc/ssh/sshd_config
pada server):Jadi, jika ada variabel lingkungan terkait-lokal di shell Anda, mereka akan diisi ke sesi SSH di sisi server.
Sayangnya,
SendEnv
opsi ini bersifat kumulatif . Menurutman 5 ssh_config
:yang berarti itu tidak dapat ditimpa .
Solusinya
Terkadang tidak mungkin atau tidak bijaksana untuk mengubah konfigurasi seluruh sistem, terutama di sisi server. Namun, Anda dapat memotongnya . Dan itulah efek samping dari
-F
opsi dalam perintah ssh. Menurutman ssh
:Secara default file konfigurasi per-pengguna
~/.ssh/config
digunakan jika ada. Tetapi Anda dapat secara eksplisit menentukannya di baris perintah untuk memotong/etc/ssh/ssh_config
:Akan lebih mudah jika Anda membuat alias di
~/.bashrc
:Dengan cara ini,
SendEnv
arahan default dalam konfigurasi seluruh sistem tidak efektif, sehingga tidak ada variabel lingkungan yang dikirim ke server SSH secara default.sumber
Saya memiliki masalah serupa. Solusi saya adalah mengomentari
SendEnv
baris dalam/etc/ssh/ssh_config
(karena ini tidak dapat diganti), dan menambahkan entri berikut di~/.ssh/config
:dengan
<somehost>
menjadi nama host yang saya tidak ingin mengirim variabel lingkungan apa pun.sumber