使用基于浏览器的 SSH 控制台访问我的 Lightsail 实例时,为什么我会收到 UPSTREAM_ERROR、UPSTREAM_NOT_FOUND、或 CLIENT_UNAUTHORIZED 错误提示?

上次更新时间:2021 年 10 月 12 日

使用基于浏览器的 SSH 控制台连接到我的 Amazon Lightsail 实例时,我收到以下错误消息之一:

  • 您的实例遇到错误并已关闭连接。请重试或联系客户支持。UPSTREAM_ERROR [515]
  • 发生错误,我们无法连接到与您的实例或保持连接状态。如果此实例刚刚启动,请在一两分钟后重试。UPSTREAM_NOT_FOUND [519]
  • 登录失败。如果此实例刚刚启动,请在一两分钟后重试。CLIENT_UNAUTHORIZED [769]

如何对这些错误进行故障排除?

简短描述

UPSTREAM_ERROR [515]UPSTREAM_NOT_FOUND [519] 错误表示使用 SSH 时无法访问您的 Lightsail 实例。以下是这些错误的常见原因:

  • 实例启动失败、实例状态检查失败或实例上的资源过度使用。
  • 操作系统级防火墙正在阻止 SSH 端口访问。
  • 默认 SSH 端口 (22) 已更改为另一个端口。
  • SSH 服务已关闭。

CLIENT_UNICENCOUNFIED [769] 错误表示您的 Lightsail 实例中存在 SSH 身份验证问题。以下是发生此错误的常见原因:

  • /etc/ssh/lightsail_instance_ca.pub 中的 Lightsail 系统密钥配置错误。
  • 您已将 Ubuntu 实例从旧版本升级到 20.04 或更高版本。

解决方法

实例启动失败、实例状态检查失败或实例上的资源过度使用

查看实例的状态检查指标,以确定实例的系统状态检查或实例状态检查是否失败。

系统状态检查

如果系统状态检查失败,则说明实例的底层硬件运行状况不佳。要解决此问题,请先停止然后启动该实例。这会将该实例迁移到运行良好的硬件。

警告:请注意,实例的公有 IP 地址在每次停止和启动实例时都会更改。如果您希望 IP 地址在每次停止和启动实例时都保持不变,请附上一个静态 IP 地址

实例状态检查

如果实例状态检查失败,则可能是操作系统级别的问题导致启动错误。或者,实例的资源(例如 CPU 或内存)可能被过度利用。对于故障排除步骤,请参阅如何排查导致我的 Lightsail 实例无响应的常见问题?

操作系统级防火墙正在阻止 SSH 端口访问

基于浏览器的 SSH 访问使用 Amazon 内部 IP 地址连接到您的 Lightsail 实例。如果操作系统级防火墙(如 Iptables、UFW 等)或访问控制文件,如 /etc/hosts.deny (即基于 cPanel 的实例中的主机访问控制)仅允许 SSH 访问一组 IP 地址而拒绝所有其他 IP 地址,则您会收到 UPSTREAM_NOT_FOUND [519]UPSTREAM_ERROR [515] 错误。如果防火墙完全阻止 SSH 访问,也会出现同样的问题。

要解决此问题,请执行下列操作之一:

  • 如果使用终端或 PuTTY 应用程序对实例进行 SSH 访问有效,则登录实例并从防火墙和 /etc/hosts.deny 文件中删除拒绝规则。
  • 如果您有 cPanel 实例,请访问 WHM 控制台以删除防火墙规则。
  • 如果您无法通过终端或 PuTTY 应用程序使用 SSH 连接到实例,请使用启动脚本停用防火墙。只有在启动实例时才能添加启动脚本。要使用启动脚本停用操作系统级防火墙、Iptables 和 UFW,请执行以下操作:

1.    打开 Amazon Lightsail 控制台

2.    创建实例的手动快照

3.    在 Snapshots (快照)选项卡上的 Manual snapshots (手动快照)项下,选择新快照旁边的三个点。

4.    选择 Create new instance (创建新实例)。

5.    选择与上一个实例相同的可用区域。

6.    选择 Add launch script (添加启动脚本),然后添加以下脚本。

注意:以下示例停用 UFW 防火墙,刷新所有 iptable 链或防火墙规则,并通过重命名 /etc/hosts.deny 文件来停用该文件。

sudo ufw disable
sudo iptables -F
sudo mv /etc/hosts.deny /etc/hosts.deny_backup
sudo touch /etc/hosts.deny
sudo systemctl enable sshd
sudo systemctl restart sshd

7.    选择新的实例计划,或使用与之前的实例相同的计划。

8.    输入实例的名称,然后选择 Create instance (创建实例)。

新实例开始运行后,等待 10 到 15 分钟,然后尝试使用基于浏览器的 SSH 控制台连接到该实例。

注意:如果以前的实例具有静态 IP 地址,则可以在新实例上使用它。分离静态 IP 地址,然后从 Networking (联网)选项卡将其附加到新实例。有关更多信息,请参阅 Amazon Lightsail 中的静态 IP 地址

SSH 服务已关闭

如果 SSH 服务未在实例上运行或未处于活动状态,则 SSH 连接将失败,并且您会收到 UPSREAM_NOT_FUND [519] 错误消息。要解决此问题,请为您的 Lightsail 实例配置 AWS Systems Manager 会话管理器服务。配置会话管理器后,在没有 SSH 服务的情况下访问实例,然后修复 SSH 问题。

SSH 问题的基本故障排除步骤包括:

  • 请查看 /var/log/auth.log/var/log/secure 文件中的 SSH 身份验证日志以识别错误,具体取决于操作系统的版本。
  • 测试 SSH 配置文件语法,然后更正所有错误。
sudo sshd -t
sudo systemctl restart sshd

Lightsail 系统密钥配置错误 /etc/ssh/lightsail_instance_ca.pub

Lightsail 使用系统密钥 /etc/ssh/lightsail_instance_ca.pub 来激活基于浏览器的 SSH 访问。如果缺少此文件,则 SSH 身份验证将失败,并且您会收到 CLIENT_UNAUTHORIZED [769] 错误提示。如果 Lightsail 系统密钥未在 SSH 配置文件 /etc/ssh/sshd_configTrustedUserCAKeys 参数中进行指定,则会出现同样的错误。

如果通过终端或 PuTTY 应用程序与实例的 SSH 连接正常,则登录实例并确认 /etc/ssh/sshd_config 文件存在且其中包含 ssh-rsa 密钥。

如果文件丢失,请采取以下步骤重新创建文件:

1.    运行以下命令并确认已在命令输出中获得 ssh-rsa 密钥:

sudo cat /var/lib/cloud/instance/user-data.txt | grep ^ssh-rsa

2.    如果命令在输出中返回 ssh-rsa 密钥,则运行以下命令将其复制到 /etc/ssh/lightsail_instance_ca.pub

sudo sh -c "cat /var/lib/cloud/instance/user-data.txt | grep ^ssh-rsa > /etc/ssh/lightsail_instance_ca.pub"
    sudo sh -c "echo >> /etc/ssh/sshd_config" 
    sudo sh -c "echo 'TrustedUserCAKeys /etc/ssh/lightsail_instance_ca.pub' >> /etc/ssh/sshd_config"
    sudo systemctl restart sshd

3.    如果您未从步骤 1 中获得 ssh-rsa 密钥,或者无法使用终端或 PuTTY 应用程序与实例进行 SSH 连接,请创建实例的手动快照使用该快照启动新实例。实例启动时,Lightsail 系统密钥会自动添加到服务器中。

您已从较旧的 Ubuntu 版本升级到 20.04 或更高版本

对于运行 Ubuntu 20.04 或更高版本的实例,您必须允许证书颁发机构 (CA) 使用 ssh-rsa 算法对证书进行签名。否则,身份验证将失败,并且您会收到 CLIENT_UNAUTHORIZED [769] 错误提示。默认情况下,允许 CA 在 Ubuntu 20.04 实例中使用 ssh-rsa 算法。但是,如果您将旧版本的 Ubuntu 升级到 20.04,则必须手动允许 CA。为此,请执行以下操作:

1.    使用 SSH 客户端(如终端或 PuTTY 应用程序)连接到实例。

2.    打开 SSH 配置文件 (/etc/ssh/sshd_config)。

2.    在 CASignatureAlgorithms 行中添加 ssh_rsa。以下示例显示的是在修改为添加 ssh_rsa 之后的 CASignatureAlgorithms 行:

CASignatureAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

3.    运行以下命令以重新启动 sshd 服务:

$ sudo systemctl restart sshd

这篇文章对您有帮助吗?


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