SSH에는 외국 문자가 표시되지 않습니다


17

사용 ssh및 원격 서버 사용에 문제가 있습니다 (관리자 액세스 권한이 없음)-특히 한국어 및 키릴 문자가있는 폴더가 몇 개 있습니다.

로 상위 폴더 내용을 표시하면 ls문자가 "?"로 이스케이프됩니다. 아마도 한글 문자가 있어야 하는 문자 수보다 훨씬 더 많이 나오는 것처럼 보입니다 .

사용중인 터미널 프로그램이 문자를 sftp완벽하게 표시하므로 문자를 표시 할 수 있음을 알고 있습니다 . 내가 시도한 모든 터미널에서 문제가 발생합니다.

기계 요약

로컬 머신 :

  • 리눅스 2.6.32-5-686, i686
  • 데비안 GNU / 리눅스 6.0.2 (짜내기)
  • 관리자 액세스 권한이 있습니다

원격 서버 :

  • 리눅스 2.6.32-bpo.5-amd64, x86_64
  • 데비안 GNU / 리눅스 5.0.8 (lenny)
  • 관리자 권한이 없거나 물리적 인 권한이 없음

아마도 다른 중요한 통계 나 정보를 놓친 것 같습니다.이 경우 사과드립니다. 나는 Windows 이외의 컴퓨팅 측면에서 완전히 새로운 사람이므로 여기서 무엇을하고 있는지 거의 알지 못합니다.


2
로컬 및 원격으로 localeand locale -a명령 의 출력을 게시 하십시오.
enzotib

감사합니다 @enzotib-귀하의 의견은 제공된 로케일이 로컬 및 원격으로 동일하지 않을 수 있다는 생각으로 나를 안내했습니다.
ChemicalRascal

답변:


20

귀하의 로케일 정보는 서버 시스템에 올바르게 설정되어 있지 않습니다. 특히, LC_CTYPE터미널의 문자 인코딩을 나타내는 변수가 올바르게 설정되지 않았습니다 (또는 전혀 의심됩니다).

로컬 터미널에서 실행 locale하여 로캘 설정을 확인하십시오. 당신은 아마 (다른 라인들 중에서) 다음과 같은 것을 볼 것입니다 LC_CTYPE=en_US.UTF-8; 여기서 중요한 것은 UTF-8 인코딩을 .UTF-8나타내는 부분 입니다. 이것은 유닉스 세계 (및 그 이상)에서 다국어 텍스트를위한 사실상의 표준 인코딩입니다.

이 정보를 서버에 전달해야합니다. 작동하는 가장 좋은 방법은 ssh 연결을 통해 로케일 정보를 보내는 것입니다. 이를 위해 끝에 다음 줄을 추가하십시오 ~/.ssh/config.

Host *
SendEnv LC_* LANG

이를 위해서는 AcceptEnv서버 설정 ( /etc/ssh/sshd_config) 에 적절한 지시어가 있어야합니다 ( 기본적으로 Debian).

그래도 작동하지 않고 항상 UTF-8 터미널에서 서버에 로그인하는 경우 서버의 라인 (또는 쉘이 사용하는 파일) 에 라인 export LC_CTYPE=en_US.UTF-8을 추가하십시오 . 로케일 이름 (예 :)은 에서 제공 한 이름 중 하나 여야하며 ( 또는 약간의 변형) 있어야합니다 .~/.bashrc~/.zshrcen_US.UTF-8locale -a.UTF-8.utf8


1
아! 문제가 될 것입니다. en_AU.utf8을 로컬에서 "사용"하는데, 이는 이미 서버로 전달 된 것 같습니다 (적어도 locale출력이 일치 함). 그러나 locale -a원격으로 en_GB.utf8 및 en_US.utf8 만 제공했습니다. 감사!
ChemicalRascal

1
현재 로케일의 인코딩을 얻으려면 다음을 사용할 수도 있습니다.locale charmap

나의 /etc/ssh/ssh_config필요 또한 보내기 LANG( SendEnv LANG LC_*)
Shammel Lee 2016

그리고 추가 할 필요 export LC_CTYPE=en_US.UTF-8내에 ~/.profile서버 측에서. 그것을 추가해도 ~/.bashrc효과가없는 것 같습니다.
datka
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.