AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1135222
Accepted
Philip
Philip
Asked: 2023-06-30 08:28:48 +0800 CST2023-06-30 08:28:48 +0800 CST 2023-06-30 08:28:48 +0800 CST

重新启动后无法通过 SSH 连接到 GCP 虚拟机

  • 772

我曾经通过 VS code 进行远程开发。我在本地 Windows 10 上创建了 SSH 密钥,并将公钥添加到 VM 实例。一周一切都很好。但是今天我的 VS Code 突然显示权限被拒绝。所以我尝试在 GCP 控制台中找出原因。这是我发现的,但我不知道原因是什么以及如何解决它。

  • 防火墙规则正确且未更改。
  • 无法通过单击虚拟机实例列表 > 连接 > SSH 连接到 GCP 控制台中的虚拟机。显示“连接失败”。单击“故障排除”按钮将显示虚拟机状态正常和网络状态正常,但在检查用户权限时卡在加载时。

从这里开始,我认为它与某些权限问题有关,也许是 SSH 密钥?

  • 然后我在本地 Windows 10 上创建了一个新的 SSH 密钥对。
  • 然后,新密钥将添加到 VM。未设置到期日期,仅设置“{KEY} {USER}”。但是,我仍然无法通过 VScode 连接 SSH。
  • 连接到 GCP 中的虚拟机仍然失败
  • 我尝试创建一个新的虚拟机并使用 SSH 密钥对进行测试。关键是工作。我可以用 VS code 连接。

然后我尝试“查看日志”。并发现每次记录用户 g3dayseo 的更新密钥时都会出现许多错误。这里有些例子。

标题

Updating keys for user g3dayseo.
{
insertId: "27ysnuf4tckja"
jsonPayload: {
localTimestamp: "2023-06-30T00:09:42.8300Z"
message: "Updating keys for user g3dayseo."
}
logName: "projects/beautylnfcom/logs/GCEGuestAgent"
receiveTimestamp: "2023-06-30T00:09:43.842531278Z"
resource: {2}
severity: "INFO"
sourceLocation: {3}
timestamp: "2023-06-30T00:09:42.830084525Z"
}

标题

Invalid ssh key entry - expired key: g3dayseo:ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFKv3f/jQZRbGdQnvL5Swy6f/E4Z84nnwHfgyiorYPu5VS5GF9yOOTe3wFFtGLFQns0qHtzIn2MgsEfQQIml8Vk= google-ssh {"userName":"[email protected]","expireOn":"2023-06-30T00:12:27+0000"}

内容

{
insertId: "1js4l5ne4dso2"
jsonPayload: {
localTimestamp: "2023-06-30T00:12:42.9094Z"
message: "Invalid ssh key entry - expired key: g3dayseo:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCWSRpEt0TN03Jehtu0HEM2pXoJK7+wqZfss/TSbCGqPaZ4y36nZ8d/zyc9Q3cLkTFN9nYlDEwwUnG1UASpKBYox0Q7o/KTBOP0YGzksTPTvBjWaiUlCmZ/jAdj3ATaH5xyyjX89V5BXWAJRG2HxbW/U1r48Uk5Z+OZ8Q82MzYST6FkJbONp2jG9NEIiyg/oEj8iCpAMlh6xcioAlYZSyvAcKR6auCDkOcUTOkTG09/UG/3ZHdY+ZnMiMyGI1rc9fTN36yA7oSMvpKWxvk+caWpUTA4jlovxYIm5EeN9vk5BKK2YGt7cBNynZgA394M/mKAIk/n3rLaAVBitIexwntL google-ssh {"userName":"[email protected]","expireOn":"2023-06-30T00:12:41+0000"}"
}
logName: "projects/beautylnfcom/logs/GCEGuestAgent"
receiveTimestamp: "2023-06-30T00:12:43.919710439Z"
resource: {
labels: {3}
type: "gce_instance"
}
severity: "ERROR"
sourceLocation: {
file: "non_windows_accounts.go"
function: "main.getUserKeys"
line: "199"
}
timestamp: "2023-06-30T00:12:42.909503214Z"
}

我不知道现在我能做什么。我搜索了很多文章。有人告诉我们在云壳上试试。

gcloud compute ssh --zone "asia-east1-b" "newpostai" --project "beautylnfcom"

然后它要求输入密码。但我记得我之前没有设置密码。

请帮忙。我很沮丧。虽然我有备份并且可以将其加载到新实例上,但我真的想弄清楚重新启动后这是如何发生的,如何修复它以及如何防止它。

预先感谢您阅读本文。

ssh
  • 1 1 个回答
  • 115 Views

1 个回答

  • Voted
  1. Best Answer
    Veera Nagireddy
    2023-07-05T18:59:54+08:002023-07-05T18:59:54+08:00

    Permission denied (publickey)出现错误“ ”的原因有多种。请遵循以下 2 个解决方法,这可能有助于解决您的问题:

    不可能从 Linux VM 中获取实际密码(已加密),但如果您想在 Linux VM 上获取/重置本地用户的密码,则可以设置新密码。

    解决方法 1:通过启动脚本重置密码:

    此启动脚本可用于在实例启动时设置临时密码(将 [用户名] 和 [密码] 替换为实际用户名和您选择的临时密码:

    方法一:

    #! /bin/bash
    echo [Username] : [Password] | chpasswd
    

    如果您没有 root 密码,请按照以下步骤使用启动脚本将其添加到您的实例:

    1. 转到 GCP 控制台中的虚拟机实例页面。

    2. 单击要为其添加启动脚本的实例。

    3. 单击页面顶部的编辑按钮。

    4. 点击“ Enable connecting to serial ports”

    5. 在自定义元数据下,您将找到“ Automation”部分。

    6. 将下面的“ Value”设置到“ Startup script”框中:

    方法一:

    #! /bin/bash
    echo root:PASSWORD | chpasswd
    

    方法2:

    #! /bin/bash
    usermod -p $(echo "password" | openssl passwd -1 -stdin) root
    
    1. 单击“保存”,然后单击页面顶部的“重置”。您可能需要等待一段时间实例才能重新启动。

    2. 单击Connect to serial port页面上的“ ”。

    3. 在新窗口中,您可能需要稍等一下,然后按Enter一次键盘上的“ ”;然后,您应该会看到登录提示。

    4. 使用您提供的根和密码登录。

    注意:重新获得虚拟机的访问权限后,请删除您输入的自定义元数据,否则它将在每次实例重新启动时执行。此外,省略此步骤可能会在控制台中暴露 root 密码。

    解决方法2: 检查您的问题可能是由于实例上缺少主机密钥,或者主机密钥的权限已被修改。请按照以下步骤验证此行为并解决问题:

    1. /etc/ssh/ssh_host_rsa_key如果串口控制台可以连接到实例,则使用目录ls -ltrh中的命令检查文件的权限/etc/ssh。

    2. 文件的权限应该是-rw-r---r--。如果没有,chmod 644 ssh_host_rsa_key可以使用命令来设置权限。

    3. 如果串行控制台连接不起作用,请通过在救援实例上安装启动磁盘来检查权限。

    4. 创建启动磁盘的快照。请参阅创建快照

    5. 创建救援实例并附加快照的附加磁盘。

    6. 运行lsblk -f以识别添加的辅助磁盘。

    7. 使用命令挂载磁盘

    创建目录命令:mkdir ~/recovery挂载磁盘命令:mount -o nouuid <disk_path> ~/recovery

    1. 检查目录下是否有ssh_host_rsa_key和文件,并参照步骤2验证权限。ssh_host_rsa_key.pub/etc/ssh/

    2. 如果文件不存在,则为实例生成密钥。通过运行以下命令更改根目录:chroot ~/recovery/

    通过运行以下命令生成主机密钥:

    $ sudo ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
    $ sudo ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
    $ sudo ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
    
    1. 使用救援虚拟机卸载磁盘umount ~/recovery并将磁盘与实例分离

    2. 将磁盘连接回受影响的实例并重新启动该实例。

    • 1

相关问题

  • 如何最好地设置 ssh 隧道以访问远程网络 (Linux)

  • SSH 和重定向

  • 通过 SSH 会话使用 NET USER 命令拒绝访问

  • SSH 服务器零日漏洞利用 - 保护自己的建议

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve