外国の文字はSSHで表示されません


17

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)
  • 管理者権限も物理的権限もありません

私はおそらく他の重要な統計情報や少しの情報を見逃しているでしょう。その場合は謝罪します。私はコンピューティングの非Windows側全体にかなり慣れていないので、ここで何をしているのかほとんどわかりません。


2
ローカルおよびリモートの両方でlocaleおよびlocale -aコマンドからの出力を投稿してください
enzotib

ありがとう@enzotib-あなたのコメントは、提供されたロケールがローカルとリモートで同じではないかもしれないという考えに私を小気味良くさせました。
ChemicalRascal

回答:


20

あなたのロケール情報は、サーバマシン上で正しく設定されていません。具体的にはLC_CTYPE、端末上の文字のエンコードを示す変数が正しく設定されていません(または、まったく疑っています)。

ローカル端末で、実行localeしてロケール設定を確認します。(他の行の中で)次のようなものが表示されるでしょうLC_CTYPE=en_US.UTF-8。ここで重要なのは、UTF-8エンコーディングを.UTF-8示す部分です。これは、Unixの世界(およびそれ以降)での多言語テキストの事実上の標準エンコーディングです。

この情報をサーバーに渡す必要があります。動作する場合の最善の方法は、ssh接続を介してロケール情報を送信することです。このために、次の行を末尾に追加します~/.ssh/config

Host *
SendEnv LC_* LANG

これにはAcceptEnv、サーバー構成(/etc/ssh/sshd_config)に適切なディレクティブが存在する必要があります(Debianではデフォルトです)。

それが機能せず、常にUTF-8ターミナルからサーバーにログインする場合は、サーバー(またはシェルが使用するファイル)に行export LC_CTYPE=en_US.UTF-8を追加します。ロケール名(など)は、によって提供されるものの1つである必要があり、持っている必要があります(または些細なバリエーション)。~/.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も送信する必要がありますLANGSendEnv LANG LC_*
シャンメルリー

そして、サーバー側でexport LC_CTYPE=en_US.UTF-8自分~/.profileに追加する必要がありました。追加~/.bashrcしても効果がないように見えました。
-datka
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.