排查 Azure Linux VM 中由于权限和所有权问题而导致的 SSH 连接问题
注意
本文中引用的 CentOS 是 Linux 发行版, (EOL) 将达到生命周期结束。 相应地考虑使用和计划。 有关详细信息,请参阅 CentOS 生命周期终止指南。
本文提供了以下问题的解决方案:由于 RHEL 中的 /var/empty/sshd 目录、SUSE 中的 / var/lib/empty 目录或 Ubuntu 中的 /var/run/sshd 目录不存在,因此通过安全外壳 ( (SSH) 连接到 Linux 虚拟机) 失败,或者它不归根用户所有, 或者它是组可写或可写的。
症状
通过 SSH 连接到 Linux 虚拟机 (VM) 时,连接将失败。 可能会收到以下有关受影响目录的错误消息,具体取决于 Linux 分发版。
sudo tail /var/log/messages
sshd: /var/empty/sshd must be owned by root and not group or world-writable.
原因
如果受影响的目录不归根用户所有,或者它是组可写或可写的,则可能会出现此问题。
若要解决此问题,请使用以下解决方法之一:
解决方法 1:联机修复 VM
下面是修复 VM 脱机的两种方法:
使用串行控制台
从 Azure 门户 连接到 VM 的串行控制台。
使用本地管理帐户及其相应的凭据或密码登录到 VM。
运行以下命令以解决权限和所有权问题:
sudo mkdir -p /var/empty/sshd sudo chmod 755 /var/empty/sshd sudo chown root:root /var/empty/sshd
使用“运行命令”扩展
注意
此方法依赖于 Azure Linux VM 代理 (waagent) 。 因此,请确保代理已安装在 VM 中,并且其服务正在运行。
在Azure 门户中,打开 VM 的“属性”窗口,检查代理状态。 如果代理已启用并处于 “就绪” 状态,请按照以下步骤更改权限:
转到Azure 门户,找到 VM 设置,然后选择“操作”下的“运行命令”。
通过选择“ RunShellScript>运行”执行以下 shell 脚本:
#!/bin/bash #Script to change permissions on a file mkdir -p /var/empty/sshd;chmod 755 /var/empty/sshd;chown root:root /var/empty/sshd
- 脚本执行完成后,输出控制台窗口将显示“启用成功”消息。
如果可以通过 SSH 连接到 VM,并且想要分析 Run-command 脚本执行的详细信息,请检查 /var/log/azure/run-command 目录中的 handler.log 文件。
解决方法 2:脱机修复 VM
注意
- 如果 VM 串行控制台访问不可用且 waagent 未准备就绪,请使用此解决方法。
- 在 Ubuntu 中, /var/run/sshd 目录在内存中运行。 重启 VM 也会修复此问题。 因此,Ubuntu VM 中的脱机故障排除不是必需的。
下面是修复 VM 脱机的两种方法:
使用 Azure Linux 自动修复 (ALAR)
Azure Linux 自动修复 (ALAR) 脚本是 使用 Azure 虚拟机修复命令修复 Linux VM 中所述的 VM 修复扩展的一部分。
按照以下步骤自动执行手动脱机过程:
注意
在以下步骤中,相应地替换 $RGNAME
、、$USERNAME
$VMNAME
、 $PASSWORD
和 repairdiskcopy
值。
使用 az vm repair create 命令创建修复 VM。 修复 VM 具有附加有问题的 VM 的 OS 磁盘副本。
az vm repair create --verbose -g $RGNAME -n $VMNAME --repair-username $USERNAME --repair-password $PASSWORD --copy-disk-name repairdiskcopy
登录到修复 VM。 将 和 chroot 装载到 OS 磁盘附加副本的文件系统。 按照详细的 chroot 说明进行操作。
运行以下命令以解决权限和所有权问题:
mkdir -p /var/empty/sshd chmod 755 /var/empty/sshd chown root:root /var/empty/sshd
应用更改后,运行以下命令
az vm repair restore
,与原始 VM 执行自动 OS 磁盘交换。az vm repair restore --verbose -g $RGNAME -n $VMNAME
使用手动方法
如果串行控制台和 ALAR 方法都不适用或失败,则必须手动执行修复。 按照以下步骤手动将 OS 磁盘附加到恢复 VM,并将 OS 磁盘交换回原始 VM:
将 OS 磁盘成功附加到恢复 VM 后,请按照详细的 chroot 说明 装载和 chroot 到附加的 OS 磁盘的文件系统。 然后,按照 使用 Azure Linux 自动修复 (ALAR) 部分中的步骤 3 解决权限和所有权问题。
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈