SFTP 远程 readdir 失败 - 文件名中包含国家字符

SFTP 远程 readdir 失败 - 文件名中包含国家字符

我创建了一个名称中包含国家字符的目录。我可以通过以下方式查看和浏览该目录ssh

# cd /root
# ls
СтранноеРусскоеИмя

但不能通过以下方式做到这一点SFTP

sftp> cd /root
sftp> ls
remote readdir("/root"): Failure
sftp> 

为什么以及如何解决?


客户端软件是无辜的,因为它可以与其他主机一起工作。


权限也可以,因为如果文件名是英文,则ls可以正常工作。

在此输入图像描述

在此屏幕截图中,您可以在目录中看到两个后续ls命令root。第一个失败了,第二个成功了。唯一的区别是并行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 变体。

相关内容