Karakter asing tidak akan ditampilkan di SSH

17

Saya mengalami beberapa masalah dengan penggunaan sshdan server jarak jauh (yang saya tidak punya akses admin) - Secara khusus, ada beberapa folder di sana dengan teks Korea dan Cyrillic.

Ketika saya menampilkan isi folder induk ls, karakter-karakter tersebut diloloskan sebagai "?". Mungkin yang perlu diperhatikan adalah bahwa karakter Korea tampaknya jauh lebih banyak daripada jumlah karakter yang seharusnya ada.

Saya tahu bahwa program terminal yang saya gunakan dapat menampilkan karakter, seperti menggunakan sftptampilan mereka dengan sempurna. Masalah terjadi di semua terminal yang saya coba.

Ringkasan mesin

Mesin lokal:

  • Linux 2.6.32-5-686, i686
  • Debian GNU / Linux 6.0.2 (pemerasan)
  • Memiliki akses admin

Server jarak jauh:

  • Linux 2.6.32-bpo.5-amd64, x86_64
  • Debian GNU / Linux 5.0.8 (lenny)
  • Tidak memiliki akses admin, maupun fisik

Saya mungkin melewatkan beberapa statistik penting atau sedikit informasi, dalam hal ini saya minta maaf. Saya cukup baru di seluruh sisi komputasi non-Windows, jadi saya hampir tidak tahu apa yang saya lakukan di sini.

Bajingan kimia
sumber
2
memposting output dari localedan locale -aperintah, baik secara lokal maupun jarak jauh, tolong
enzotib
Terima kasih @enzotib - Komentar Anda mendorong saya ke gagasan bahwa lokal yang ditawarkan mungkin tidak sama secara lokal dan jarak jauh.
ChemicalRascal

Jawaban:

20

Informasi lokal Anda tidak diatur dengan benar di mesin server. Secara khusus, LC_CTYPEvariabel, yang menunjukkan pengkodean karakter pada terminal, tidak diatur dengan benar (atau, saya curiga, sama sekali).

Di terminal lokal Anda, jalankan localeuntuk melihat pengaturan lokal Anda. Anda mungkin akan melihat (di antara baris lain) sesuatu seperti LC_CTYPE=en_US.UTF-8; yang penting di sini adalah .UTF-8bagian, yang menunjukkan pengkodean UTF-8 . Ini adalah penyandian standar de facto untuk teks multibahasa di dunia unix (dan lebih jauh).

Anda perlu meneruskan informasi ini ke server. Cara terbaik, jika berfungsi, adalah mengirim informasi lokal melalui koneksi ssh. Untuk ini, tambahkan baris berikut di akhir ~/.ssh/config:

Host *
SendEnv LC_* LANG

Ini mensyaratkan bahwa AcceptEnvdirektif yang sesuai harus ada dalam konfigurasi server ( /etc/ssh/sshd_config) (ini secara default pada Debian).

Jika itu tidak berhasil, dan Anda selalu masuk ke server dari terminal UTF-8, tambahkan baris export LC_CTYPE=en_US.UTF-8ke ~/.bashrcserver Anda (atau ~/.zshrcfile apa pun yang digunakan shell Anda). Nama lokal (mis. en_US.UTF-8) Harus salah satu dari yang ditawarkan oleh locale -a, dan harus memiliki .UTF-8( .utf8atau beberapa variasi sepele).

Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
Ah! Itu akan menjadi masalah: Saya "menggunakan" en_AU.utf8 secara lokal, yang sepertinya sudah diteruskan ke server (atau, paling tidak, localekeluarannya cocok). Namun, locale -adari jarak jauh hanya memberi en_GB.utf8 dan en_US.utf8. Terima kasih!
ChemicalRascal
1
Untuk mendapatkan pengkodean lokal saat ini, Anda juga dapat menggunakan:locale charmap
/etc/ssh/ssh_configLANGSendEnv LANG LC_*
Wajib
Dan saya perlu menambahkan export LC_CTYPE=en_US.UTF-8saya ~/.profiledi sisi server. Menambahkannya ke ~/.bashrctampaknya tidak berpengaruh.
datka