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

3 分钟阅读
0

当我使用基于浏览器的 SSH 控制台连接到我的 Amazon Lightsail 实例时,我收到 UPSTREAM_ERROR [515]、UPSTREAM_NOT_FOUND [519] 或 CLIENT_UNAUTHORIZED [769] 消息。 如何排查这些错误?

简短描述

如果您在连接到 Lightsail 实例时收到错误,并且该错误与 SSH 有关,则您可能会看到以下消息之一:

  • “Your instance encountered an error and has closed the connection.Try again or contact customer support.UPSTREAM_ERROR [515]”(您的实例遇到错误并已关闭连接。请重试或联系客户支持。UPSTREAM_ERROR [515])
  • “An error occurred and we were unable to connect or stay connected to your instance.If this instance has just started up, try again in a minute or two.UPSTREAM_NOT_FOUND [519]”(发生错误,我们无法与您的实例连接或保持连接状态。如果此实例刚刚启动,请在一两分钟后重试。UPSTREAM_NOT_FOUND [519])
  • “Login failed.If this instance has just started up, try again in a minute or two.CLIENT_UNAUTHORIZED [769]”(登录失败。如果此实例刚刚启动,请在一两分钟后重试。CLIENT_UNAUTHORIZED [769])

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

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

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

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

解决方法

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

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

系统状态检查

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

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

实例状态检查

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

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

基于浏览器的 SSH 访问使用 Amazon 内部 IP 地址连接到您的 Lightsail 实例。一些操作系统级防火墙和访问控制文件仅允许 SSH 访问一组 IP 地址,而拒绝所有其他 IP 地址。在这种情况下,您会收到 UPSTREAM_NOT_FOUND [519]UPSTREAM_ERROR [515] 错误。如果防火墙完全阻止 SSH 访问,也会出现同样的问题。

**注意:**操作系统级防火墙的示例包括 Iptables 和 UFW,而控制文件的示例是 /etc/hosts.deny(基于 cPanel 的实例中的主机访问控制)。

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

  • 如果使用终端或 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 地址。分离静态 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)。

3.    根据您的 Ubuntu 版本,将 CA 参数添加到文件中:

       **如果操作系统版本升级到 Ubuntu 20.04:**在 sshd_config 文件中手动输入 CASignatureAlgorithms 参数行:

$ sudo vi /etc/ssh/sshd_config
$ cat /etc/ssh/sshd_config | egrep "CASignature"
CASignatureAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

       **如果操作系统版本升级到 Ubuntu 22.04:**在 sshd_config 文件中手动输入 CASignatureAlgorithmsPubkeyAcceptedAlgorithms 参数行:

$ sudo vi /etc/ssh/sshd_config
$ cat /etc/ssh/sshd_config | egrep "CASignature|PubkeyAccepted"
CASignatureAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa-cert-v01@openssh.com,ssh-rsa

4.    运行以下命令以验证 sshd 配置文件内容:

$ sudo sshd -T

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

$ sudo systemctl restart sshd

AWS 官方
AWS 官方已更新 1 年前