如何排查使用 SFTP 连接在连接到我的 EC2 Linux 实例时遇到的问题?

上次更新日期:2020 年 12 月 9 日

我无法使用安全文件传输协议 (SFTP) 连接来连接到我的 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例。或者,我收到错误消息“remote readdir Permission denied”(远程 readdir 权限被拒绝)。我应该如何排查此问题?

简短描述

通过 SFTP 连接来连接到 EC2 实例可能会失败的原因有很多。以下是常见连接问题的故障排除步骤:

  • 验证您的实例满足了 SSH 连接先决条件。
  • 在启用详细消息时登录实例以找出错误。
  • 审核身份验证和系统日志中是否存在错误。
  • 验证 SSHD 配置文件已配置了 SFTP 的子系统。
  • 解决 Remote readdir Permission denied(远程 readdir 权限被拒绝)错误。

解决方法

验证您的实例满足了 SSH 连接先决条件

SFTP 的基础是 SSH。验证实例满足了 SSH 连接先决条件。有关先决条件列表,请参阅使用 SSH 连接到 Linux 实例

在启用详细消息时登录实例以找出错误

常见的连接错误消息如下:

  • Connection timed out(连接超时)或 Connection refused(连接被拒绝)
  • Permission denied(权限被拒绝)或 Authentication failed(身份验证失败)
  • Server refused our key(服务器拒绝了我们的密钥)

有关在启用详细消息时登录实例以及如何解决这些错误和其他 SSH 相关错误的信息,请参阅如何排查使用 SSH 连接到我的 Amazon EC2 Linux 实例时遇到的问题?

审核身份验证和系统日志中是否存在错误

RHEL 和 Fedora 身份验证日志:

$ sudo less /var/log/secure

RHEL 和 Fedora 通用系统日志:

$ sudo less /var/log/messages

Debian 和 Ubuntu 身份验证日志:

$ sudo less /var/log/auth.log

Debian 和 Ubuntu 通用系统日志:

$ sudo less /var/log/syslog

验证 SSHD 配置文件已配置了 SFTP 的子系统

验证 SSHD 配置文件已配置了 SFTP 的子系统,并且 sftp-server 的共享对象文件存在于相应的目录中。如果 SFTP 连接由于缺少 SFTP 子系统而关闭,则日志可能会显示 subsystem request failed on channel 0(子系统请求在通道 0 失败)错误。

基于 RHEL 和 Fedora 的发行版:

$ sudo grep Subsystem /etc/ssh/sshd_config
Subsystem sftp    /usr/libexec/openssh/sftp-server
$ sudo ls -l /usr/libexec/openssh/sftp-server
-rwxr-xr-x. 1 root root 100784 Jun 26  2019 /usr/libexec/openssh/sftp-server

基于 Debian 和 UbuntuU 的发行版:

$ sudo grep Subsystem /etc/ssh/sshd_config
Subsystem    sftp    /usr/lib/openssh/sftp-server
$ sudo ls -l /usr/lib/openssh/sftp-server
-rwxr-xr-x 1 root root 105608 Mar  4  2019 /usr/lib/openssh/sftp-server

有关更多信息,请参阅 Linux 手册页上 sshd_config 中的子系统部分。

解决远程 readdir 权限被拒绝错误

错误 remote readdir Permission denied(远程 readdir 权限被拒绝)表示尝试使用 SFTP 连接的用户没有正确的权限。用户必须至少拥有读取和执行权限才能切换到目标目录。

使用以下命令验证用户拥有访问目标目录的权限:

ls -ldZ /directory

使用以下命令检查是否存在限制用户访问的访问控制列表 (ACL) 权限:

getfacl /directory

使用以下命令验证 SELinux 已启用:

getenforce

如果启用了 SELinux,则根据 SELinux 上下文查看 /var/log/audit/audit.log/var/log/audit.log 中是否存在权限被拒绝的错误。</p


这篇文章对您有帮助吗?


您是否需要账单或技术支持?