如何重置 Linux VM 密码或 SSH 密钥、修复 SSH 配置,以及使用 VMAccess 扩展检查磁盘一致性
重要
经典 VM 将于 2023 年 3 月 1 日停用。
如果使用 ASM 中的 IaaS 资源,请在 2023 年 3 月 1 日完成迁移。 我们建议你尽快进行切换,以利用 Azure 资源管理器中的许多增强功能。
有关详细信息,请参阅 将 IaaS 资源在 2023 年 3 月 1 日前迁移到 Azure 资源管理器。
如果由于忘记了密码、安全外壳(SSH)密钥或 SSH 配置出现问题而无法连接到 Azure 上的 Linux 虚拟机,请将 VMAccessForLinux 扩展与 Azure CLI 配合使用来重置密码或 SSH 密钥、修复 SSH 配置并检查磁盘一致性。
注释
Azure 具有用于创建和处理资源的两个不同的部署模型:资源管理器部署模型和经典部署模型。 本文介绍如何使用经典部署模型。 Microsoft 建议大多数新部署使用 Resource Manager 模型。 了解如何使用 Resource Manager 模型执行这些步骤。
使用 Azure CLI,可以使用命令行接口(Bash、终端、命令提示符)中的 azure vm 扩展集 命令来访问命令。 运行 azure help vm extension set 命令,以获取详细的扩展使用说明。
使用 Azure CLI,可以执行以下任务:
- 重置密码
- 重置 SSH 密钥
- 重置密码和 SSH 密钥
- 创建新的 sudo 用户帐户
- 重置 SSH 配置
- 删除用户
- 显示 VMAccess 扩展 的状态
- 检查已添加磁盘 的一致性
- 修复 Linux VM 上添加的磁盘
先决条件
您需要执行以下操作:
- 需要 安装 Azure CLI,连接到订阅 以使用与帐户关联的 Azure 资源。
- 在命令提示符处键入以下内容,为经典部署模型设置正确的模式:
azure config mode asm
- 如果要重置任一密码或 SSH 密钥集,请使用新的密码或一组 SSH 密钥。 如果想要重置 SSH 配置,则不需要这些配置。
重置密码
使用这些行在本地计算机上创建名为 PrivateConf.json 的文件。 将 myUserName 和 myP@ssW0rd 替换为自己的用户名和密码,并设置自己的过期日期。
{ "username":"myUserName", "password":"myP@ssW0rd", "expiration":"2020-01-01" }
运行此命令,将虚拟机的名称替换为 myVM 。
azure vm extension set myVM VMAccessForLinux Microsoft.OSTCExtensions 1.* –-private-config-path PrivateConf.json
重置 SSH 密钥
使用这些内容创建名为 PrivateConf.json 的文件。 将 myUserName 和 mySSHKey 值替换为自己的信息。
{ "username":"myUserName", "ssh_key":"mySSHKey" }
运行此命令,将虚拟机的名称替换为 myVM 。
azure vm extension set myVM VMAccessForLinux Microsoft.OSTCExtensions 1.* --private-config-path PrivateConf.json
重置密码和 SSH 密钥
使用这些内容创建名为 PrivateConf.json 的文件。 将 myUserName、mySSHKey 和 myP@ssW0rd 的值替换为您自己的信息。
{ "username":"myUserName", "ssh_key":"mySSHKey", "password":"myP@ssW0rd" }
运行此命令,将虚拟机的名称替换为 myVM 。
azure vm extension set MyVM VMAccessForLinux Microsoft.OSTCExtensions 1.* --private-config-path PrivateConf.json
创建新的 sudo 用户帐户
如果忘记了用户名,可以使用 VMAccess 创建具有 sudo 机构的新用户名。 在这种情况下,不会修改现有的用户名和密码。
若要创建新的具有密码访问权限的 sudo 用户,请使用 重置密码 中的脚本并指定新的用户名。
若要创建新的具有 SSH 密钥访问权限的 sudo 用户,请使用 重置 SSH 密钥 中的脚本并指定新的用户名。
还可以使用 重置密码和 SSH 密钥 来创建具有密码和 SSH 密钥访问的新用户。
重置 SSH 配置
如果 SSH 配置处于不想要状态,则也可能失去对 VM 的访问权限。 可以使用 VMAccess 扩展将配置重置为其默认状态。 为此,只需将“reset_ssh”键设置为“True”。 该扩展将重启 SSH 服务器,打开 VM 上的 SSH 端口,并将 SSH 配置重置为默认值。 不会更改用户帐户(名称、密码或 SSH 密钥)。
注释
重置的 SSH 配置文件位于 /etc/ssh/sshd_config。
使用此内容创建名为 PrivateConf.json 的文件。
{ "reset_ssh":"True" }
运行此命令,将虚拟机的名称替换为 myVM 。
azure vm extension set myVM VMAccessForLinux Microsoft.OSTCExtensions 1.* --private-config-path PrivateConf.json
删除用户
如果要在不直接登录到 VM 的情况下删除用户帐户,可以使用此脚本。
使用此内容创建名为 PrivateConf.json 的文件,替换要删除 removeUserName的用户名。
{ "remove_user":"removeUserName" }
运行此命令,将虚拟机的名称替换为 myVM 。
azure vm extension set myVM VMAccessForLinux Microsoft.OSTCExtensions 1.* --private-config-path PrivateConf.json
显示 VMAccess 扩展的状态
若要显示 VMAccess 扩展的状态,请运行以下命令。
azure vm extension get
检查已添加磁盘的一致性
若要在 Linux 虚拟机中的所有磁盘上运行 fsck,需要执行以下作:
使用此内容创建名为 PublicConf.json 的文件。 检查磁盘接收一个布尔值参数,以决定是否检查附加到虚拟机的磁盘。
{ "check_disk": "true" }
运行以下命令以执行,将虚拟机的名称替换为 myVM。
azure vm extension set myVM VMAccessForLinux Microsoft.OSTCExtensions 1.* --public-config-path PublicConf.json
修复磁盘
若要修复未装载或存在装载配置错误的磁盘,请使用 VMAccess 扩展重置 Linux 虚拟机上的装载配置。 将磁盘名称替换为 myDisk。
使用此内容创建名为 PublicConf.json 的文件。
{ "repair_disk":"true", "disk_name":"myDisk" }
运行以下命令以执行,将虚拟机的名称替换为 myVM。
azure vm extension set myVM VMAccessForLinux Microsoft.OSTCExtensions 1.* --public-config-path PublicConf.json
后续步骤
- 如果要使用 Azure PowerShell cmdlet 或 Azure 资源管理器模板重置密码或 SSH 密钥、修复 SSH 配置并检查磁盘一致性,请参阅 GitHub 上的VMAccess 扩展文档。
- 还可以使用 Azure 门户 重置经典部署模型中部署的 Linux VM 的密码或 SSH 密钥。 目前无法在 Resource Manager 部署模型中部署的 Linux VM 使用门户执行此操作。
- 有关使用 Azure 虚拟机的 VM 扩展的详细信息,请参阅 关于虚拟机扩展和功能。