SFTPリモートreaddirに失敗しました - ファイル名に国の文字が含まれています。

SFTPリモートreaddirに失敗しました - ファイル名に国の文字が含まれています。

名前に国の文字を含むディレクトリを作成しました。以下を使用してディレクトリを表示および参照できます。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バリアントに設定されていることを確認できます。

関連情報