在我的Google Cloud Platform vm实例中,我意外地更改了 /etc/ssh
的权限,现在我无法使用ssh和filezilla访问它 .
日志如下:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0660 for '/etc/ssh/ssh_host_ed25519_key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
key_load_private: bad permissions
我唯一可以访问的是 gcloud command
或 serial console
.
我知道我需要将目录的权限更改回 644
或 400
,但我不知道如何无法访问ssh .
如何在不访问ssh的情况下更改权限?
任何帮助将非常感激!
1 回答
将引导磁盘附加到另一个实例可以解决此问题 .
STEP 1:
使用SSH问题关闭您的实例 . 登录Google Cloud 端控制台 . 转到计算引擎 - > VM实例 . 单击您的实例并记下“引导磁盘”名称 . 这将是“引导磁盘和本地磁盘”下的第一个磁盘 .
STEP 2:
在进一步操作之前,请创建引导磁盘的快照 . 还在Compute Engine - > Disk中 . 单击您的启动盘 . 点击“CREATE SNAPSHOT” .
STEP 3:
在同一区域中创建新实例 . 微实例将起作用 .
STEP 4:
打开Cloud Shell提示符(如果设置了gcloud,这也适用于您的桌面) . 执行此命令 . 将NAME替换为您的实例名称(已损坏的SSH系统),将DISK替换为引导磁盘名称,将ZONE替换为系统所在的区域:
确保上一个命令未报告错误 .
STEP 5:
现在我们将此磁盘附加到您创建的新实例 .
确保修复实例正在运行 . 如果多个磁盘可引导,有时实例可能会混淆要从哪个磁盘引导 .
转到计算引擎 - > VM实例 . 单击您的实例 . 单击编辑 . 在“其他磁盘”下,单击“添加项” . 对于名称,请输入/选择与损坏的实例分离的磁盘 . 单击保存 .
STEP 6:
在连接两个磁盘的情况下SSH连接到新实例 .
STEP 7:
请仔细遵循这些步骤 . 我们将第二个磁盘挂载到根文件系统 . 然后更改/ mnt / repair / etc / ssh目录和内容的权限 .
成为超级用户 . 执行
sudo -s
执行
df
. 确保未安装/dev/sdb1
.为mountpoint创建一个目录:
mkdir /mnt/repair
挂载第二个磁盘:
mount /dev/sdb1 /mnt/repair
更改目录:
cd /mnt/repair/etc
设置
/etc/ssh
的权限(注意此处的相对路径):chmod 755 ssh
更改目录:
cd ssh
执行:
chmod 644 *.pub
执行:
chmod 400 *key
ssh_config
和sshd_config
应该仍然是644.如果没有修复它们 .关闭维修系统:
halt
STEP 8:
现在反转该过程并将第二个磁盘移回原始实例并重新连接 . 启动您的实例并通过SSH连接 .
注意:要重新连接引导磁盘,必须使用带-boot选项的gcloud .