我有一个 Google Cloud 项目,无法访问 CentOS 8 VM。它在 x86_64 上运行内核版本 4.18.0-193.19.1.el8_2.x86_64。我还启用了 selinux 来运行。
昨天在我的 CentOS 8 VM 上运行之前sudo yum update
,我能够通过 SSH 并通过 OTP 进行身份验证,没有任何问题。今天,我的所有 OTP 代码都失败了。我不确定更新是否是导致问题的原因,但这是我在这个问题出现之前所做的唯一重大更改。
我尝试在手机的 Google Authenticator 应用上重新同步,但没有用。此外,我尝试了在运行 时创建的每个紧急暂存代码google-authenticator
,但都不起作用。据我所知,客户端和服务器之间的时间足够同步。
为了解决这个问题,我启用了串行控制台访问,但是,我记得我从来没有为我的 CentOS 用户设置过密码——只有 SSH 密钥。因此,我无法通过串行控制台进行身份验证,也无法通过 SSH 进行身份验证。
还有什么我可以尝试的吗?
答案1
首先,我建议您检查日志。为此,请重新启动您的 VM 实例(如果可能),然后检查日志Compute Engine
-> VM instances
-> 单击 NAME_OF_YOUR_VM -> 在VM instance details
查找部分日志并单击Serial port 1 (console)
以查看任何可以解释您的 VM 实例发生了什么的错误或警告消息。
通过串行控制台获取访问权限请按照以下步骤操作:
启用串行控制台连接使用
gcloud
命令:gcloud compute instances add-metadata NAME_OF_YOUR_VM_INSTANCE \ --metadata serial-port-enable=TRUE
或前往Compute Engine
-> VM instances
-> 点击NAME_OF_YOUR_VM_INSTANCE
-> 点击EDIT
-> 前往部分Remote access
并检查Enable connecting to serial ports
创建临时用户和密码登录:关闭虚拟机并设置启动脚本通过添加在部分
Custom metadata
键startup-script
和值:useradd --groups google_sudoers tempuser echo "tempuser:password" | chpasswd
然后启动您的虚拟机。
通过串行端口连接到您的虚拟机使用
gcloud
命令:gcloud compute connect-to-serial-port NAME_OF_YOUR_VM_INSTANCE
或前往Compute Engine
-> VM instances
-> 点击NAME_OF_YOUR_VM_INSTANCE
-> 然后点击Connect to serial console
检查更新后出了什么问题。
禁用通过串行端口访问使用
gcloud
命令:gcloud compute instances add-metadata NAME_OF_YOUR_VM_INSTANCE \ --metadata serial-port-enable=FALSE
或前往Compute Engine
-> VM instances
-> 点击NAME_OF_YOUR_VM_INSTANCE
-> 点击EDIT
-> 前往部分Remote access
并取消选中Enable connecting to serial ports
请记住,根据文档与串行控制台交互:
警告:交互式串行控制台不支持基于 IP 的访问限制,例如 IP 白名单。如果您在实例上启用交互式串行控制台,客户端可以尝试从任何 IP 地址连接到该实例。如果知道正确的 SSH 密钥、用户名、项目 ID、区域和实例名称,任何人都可以连接到该实例。使用防火墙规则来控制对您的网络和特定端口的访问。
此外,请查看文档SSH 故障排除以及第三方文章解决 Compute Engine 被锁定的问题。