名前に国の文字を含むディレクトリを作成しました。以下を使用してディレクトリを表示および参照できます。ssh
# cd /root
# ls
СтранноеРусскоеИмя
ただし、次の方法ではこれを行うことはできませんSFTP
。
sftp> cd /root
sftp> ls
remote readdir("/root"): Failure
sftp>
理由と回避策は何ですか?
クライアントソフトウェアは他のホストと連携して動作するので無害です。
ファイル名が英語になっていればls
正常に動作するので権限も大丈夫です。
ls
このスクリーンショットでは、ディレクトリにある2つの後続のコマンドを表示できますroot
。最初は失敗し、2番目は成功しました。唯一の違いは、ssh
国の文字名ファイルが並列セッションから削除されることです。
答え1
これはロケールとは関係がないようです。あるコメントで思わず言及した内容に基づいて」これは、以下を介してログインしようとしているユーザープロファイルに関連している可能性があります。sftp
」、リモートサーバーにrootとしてログインしていないような気がします。
root以外のユーザーはアクセスできず、/root
これはセッションに反映されますsftp
。私のローカルサーバー上の同じファイルは次のとおりです。そのСтранноеРусскоеИмя
ファイルは次のようにディレクトリに配置されます/tmp/526629
。
sftp remoteuser@remoteserver
Connected to remoteserver.
sftp> cd /root
sftp> ls
remote readdir("/root"): Permission denied
sftp> cd /tmp/526629
sftp> ls
СтранноеРусскоеИмя
sftp>
別のオプションは実際にはロケールです。このセッションでは、以前と同じサーバー構成を使用します。
# Locale is UTF-8
LC_CTYPE="en_GB.UTF-8" sftp remoteuser@remoteserver
Connected to remoteserver.
sftp> cd /tmp/526629/
sftp> ls
СтранноеРусскоеИмя
sftp>
# Locale is C
LC_CTYPE=C sftp remoteuser@remoteserver
Connected to remoteserver.
sftp> cd /tmp/526629/
sftp> ls
sftp>
私はあなたのものを再現することはできませんが、remote readdir("/root"): Failure
リモートサーバーのロケールをチェックしてUTF-8バリアントに設定されていることを確認できます。