У меня есть некоторые проблемы с использованием ssh
и удаленного сервера (к которому у меня нет доступа администратора). В частности, там есть несколько папок с корейским и кириллическим текстом.
Когда я отображаю содержимое родительской папки с ls
помощью символов, они экранируются как «?». Возможно, следует отметить, что корейские символы, кажется, убегают гораздо больше, чем количество символов, которое должно быть там.
Я знаю, что терминальная программа, которую я использую, может отображать символы, так как использование sftp
отображает их отлично. Проблема возникает во всех терминалах, которые я пробовал.
Сводка машин
Локальная машина:
- Linux 2.6.32-5-686, i686
- Debian GNU / Linux 6.0.2 (сжатие)
- Иметь доступ администратора
Удаленный сервер:
- Linux 2.6.32-bpo.5-amd64, x86_64
- Debian GNU / Linux 5.0.8 (lenny)
- Нет доступа администратора или физического
Я, вероятно, пропустил некоторые другие важные статистические данные или немного информации, и в этом случае я прошу прощения. Я довольно новичок во всех сторонних вычислениях, поэтому я едва знаю, что я здесь делаю.
источник
locale
иlocale -a
команд, как локально и удаленно, пожалуйстаОтветы:
Информация о вашей локали неправильно настроена на сервере. В частности,
LC_CTYPE
переменная, которая указывает кодировку символов на терминале, установлена неправильно (или, я подозреваю, вообще).В своем локальном терминале запустите,
locale
чтобы увидеть настройки вашего языка. Вы, вероятно, увидите (среди других строк) что-то вродеLC_CTYPE=en_US.UTF-8
; здесь важна.UTF-8
часть, обозначающая кодировку UTF-8 . Это де-факто стандартная кодировка для многоязычного текста в мире Unix (и за его пределами).Вам необходимо передать эту информацию на сервер. Лучший способ, если он работает, - отправлять информацию о локали через соединение ssh. Для этого добавьте следующие строки в конце
~/.ssh/config
:Это требует наличия подходящей
AcceptEnv
директивы в конфигурации сервера (/etc/ssh/sshd_config
) (это по умолчанию в Debian).Если это не сработает, и вы всегда входите на сервер с терминала UTF-8, добавьте строку
export LC_CTYPE=en_US.UTF-8
на свой~/.bashrc
сервер (~/.zshrc
или любой другой файл, который использует ваша оболочка). Имя локали (напримерen_US.UTF-8
) должно быть одним из тех, которые предлагаютсяlocale -a
и должны иметь.UTF-8
(.utf8
или некоторые тривиальные варианты).источник
locale
совпадали выходные данные). Однакоlocale -a
удаленно выдали только en_GB.utf8 и en_US.utf8. Благодарность!locale charmap
/etc/ssh/ssh_config
требуется также отправкаLANG
(SendEnv LANG LC_*
)export LC_CTYPE=en_US.UTF-8
мой~/.profile
на стороне сервера. Добавление этого,~/.bashrc
казалось, не имело никакого эффекта.