如何对使用 SFTP 连接 EC2 Linux 实例进行故障排除?

2 分钟阅读
0

我无法通过安全文件传输协议(SFTP)连接到 Amazon Elastic Compute Cloud(Amazon EC2)Linux 实例。或者,我收到错误消息“远程 readdir 权限被拒绝”。

解决方案

您无法通过 SFTP 连接到 EC2 实例的原因有很多。要对连接进行故障排除,请完成以下步骤。

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

SFTP 在 SSH 的基础上运行。验证实例是否满足所有 SSH 连接先决条件。有关先决条件列表,请参阅使用 SSH 从 Linux 或 macOS 连接到 Linux 实例

在开启详细消息的情况下登录实例以识别错误

您可能会收到以下常见连接错误之一:

  • 连接超时连接被拒绝
  • 权限被拒绝身份验证失败
  • 服务器拒绝了我们的密钥

有关详细消息以及如何解决 SSH 错误的更多信息,请参阅如何解决使用 SSH 连接 Amazon EC2 Linux 实例时出现的问题?

如果您启用了 EC2 Serial Console,则可以将其用于对受支持的基于 Nitro 的实例类型进行故障排除。Serial Console 可帮助您解决启动问题、网络配置和 SSH 配置问题。Serial Console 无需有效的网络连接,即可连接到您的实例。您可以使用 Amazon EC2 控制台或 AWS 命令行界面(AWS CLI)来访问 Serial Console。

在使用 Serial Console 之前,在账户级别授予其访问权限。然后,创建 AWS Identity and Access Management(IAM)策略,向您的 IAM 用户授予访问权限。每个使用 Serial Console 的实例都必须包含至少一个基于密码的用户。有关详细信息,请参阅配置对 EC2 Serial Console 的访问

**注意:**如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新的 AWS CLI 版本

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

Amazon Linux、Amazon Linux2、RHEL 和 Fedora 身份验证日志

$ sudo less /var/log/secure

Amazon Linux、Amazon Linux2、RHEL 和 Fedora 通用系统日志

$ sudo less /var/log/messages

Debian 和 Ubuntu 身份验证日志

$ sudo less /var/log/auth.log

Debian 和 Ubuntu 通用系统日志

$ sudo less /var/log/syslog

Amazon Linux 2023

查看 SSHD 日志:

journalctl -u sshd

查看通用系统日志:

journalctl -a

验证 SSHD 配置文件中是否配置了 SFTP 子系统

验证 SSHD 配置文件是否配置了 SFTP 的子系统,以及相应目录中是否存在 sftp-server 的共享对象文件。如果 SFTP 连接因缺少 SFTP 子系统而关闭,则日志可能会显示子系统请求在通道 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 和 Ubuntu 的发行版

$ 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 man 帮助页面 sshd_config 中的 Subsystem 部分。

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

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

验证用户是否有权访问目标目录:

ls -ldZ /directory

检查限制用户访问的访问控制列表(ACL)权限:

getfacl /directory

确认您已激活 SELinux:

getenforce

如果您激活了 SELinux,请根据 SELinux 上下文查看 /var/log/audit/audit.log/var/log/audit.log 是否存在权限被拒绝的错误。

AWS 官方
AWS 官方已更新 8 个月前