Mam pewne problemy z używaniem ssh
i zdalnym serwerem (do którego nie mam uprawnień administratora) - W szczególności jest tam kilka folderów z tekstem koreańskim i cyrylicy.
Gdy wyświetlam zawartość folderu nadrzędnego za pomocą ls
, znaki są oznaczone jako „?”. Być może warto zauważyć, że koreańskie postacie wydają się uciekać znacznie bardziej niż liczba znaków, które powinny tam być.
Wiem, że program terminalowy, którego używam, może wyświetlać znaki, ponieważ używanie sftp
wyświetla je doskonale. Problem występuje na wszystkich terminalach, które próbowałem.
Podsumowanie maszyn
Maszyna lokalna:
- Linux 2.6.32-5-686, i686
- Debian GNU / Linux 6.0.2 (squeeze)
- Masz dostęp administratora
Zdalny serwer:
- Linux 2.6.32-bpo.5-amd64, x86_64
- Debian GNU / Linux 5.0.8 (lenny)
- Nie masz dostępu administracyjnego ani fizycznego
Prawdopodobnie przeoczyłem jakieś inne istotne statystyki lub trochę informacji, w takim przypadku przepraszam. Jestem całkiem nowy po stronie komputerów innych niż Windows, więc ledwo wiem, co tu robię.
źródło
locale
ilocale -a
, zarówno lokalnie, jak i zdalnie, proszęOdpowiedzi:
Twój locale informacja nie jest poprawnie skonfigurowany na serwerze. W szczególności
LC_CTYPE
zmienna, która wskazuje na kodowanie znaków na terminalu, nie jest ustawiona poprawnie (lub, jak podejrzewam, w ogóle).W lokalnym terminalu uruchom,
locale
aby zobaczyć ustawienia regionalne. Prawdopodobnie zobaczysz (między innymi wierszami) coś takiegoLC_CTYPE=en_US.UTF-8
; liczy się tu.UTF-8
część wskazująca kodowanie UTF-8 . Jest to de facto standardowe kodowanie tekstu wielojęzycznego w świecie unixowym (i nie tylko).Musisz przekazać te informacje do serwera. Najlepszym sposobem, jeśli działa, jest wysyłanie informacji o ustawieniach regionalnych za pośrednictwem połączenia ssh. W tym celu dodaj następujące wiersze na końcu
~/.ssh/config
:Wymaga to
AcceptEnv
obecności odpowiedniej dyrektywy w konfiguracji serwera (/etc/ssh/sshd_config
) (jest to domyślnie w Debianie).Jeśli to nie zadziała i zawsze logujesz się do serwera z terminala UTF-8, dodaj linię
export LC_CTYPE=en_US.UTF-8
do swojego~/.bashrc
serwera (~/.zshrc
lub dowolnego innego pliku używanego przez powłokę). Nazwa ustawień regionalnych (np.en_US.UTF-8
) Musi być jedną z tych oferowanych przezlocale -a
i musi mieć.UTF-8
(lub.utf8
inną trywialną odmianę).źródło
locale
dopasowane wyjścia). Jednaklocale -a
zdalnie podawał tylko en_GB.utf8 i en_US.utf8. Dzięki!locale charmap
/etc/ssh/ssh_config
wymagane również wysyłanieLANG
(SendEnv LANG LC_*
)export LC_CTYPE=en_US.UTF-8
do mojego~/.profile
po stronie serwera. Dodanie go do~/.bashrc
wydawało się nie mieć żadnego efektu.