恢复快照后GCE实例SSH访问丢失:22端口连接被拒绝
解决GCE快照恢复后SSH连接被拒绝的问题
以下是针对你遇到的问题的具体排查和解决步骤:
1. 通过串行控制台绕过网络直接访问实例
因为外部SSH连不上,先借助GCE的串行控制台登录实例:
- 打开GCE控制台,找到目标实例,点击「编辑」
- 勾选「启用串行控制台」,保存设置
- 返回实例详情页,点击「连接到串行控制台」
- 在弹出的控制台窗口按Enter,出现登录提示符后输入实例的系统用户名(比如创建时设置的
ubuntu或root,取决于系统)- 若忘记密码,Linux系统可通过启动脚本重置:编辑实例,在「自定义元数据」中添加
startup-script,值为echo "用户名:新密码" | chpasswd,之后重启实例;Windows系统用gcloud compute reset-windows-password 实例名称命令重置
- 若忘记密码,Linux系统可通过启动脚本重置:编辑实例,在「自定义元数据」中添加
2. 检查SSH服务状态和配置
登录串行控制台后,先确认SSH服务是否正常运行:
- 对于systemd系统(Ubuntu 16.04+/CentOS 7+):
systemctl status sshd - 对于sysvinit系统:
service ssh status - 如果服务未运行,启动并设置开机自启:
systemctl start sshd && systemctl enable sshd # 或 service ssh start && update-rc.d ssh enable - 若启动失败,查看日志定位问题:
# Ubuntu/Debian cat /var/log/auth.log # CentOS/RHEL cat /var/log/secure # systemd系统通用 journalctl -u sshd
常见启动失败原因:
/etc/ssh/sshd_config配置错误(比如ListenAddress设为127.0.0.1仅允许本地访问;PermitRootLogin被禁用却尝试用root登录;PasswordAuthentication关闭但未配置密钥)- SSH主机密钥文件权限错误(
/etc/ssh/ssh_host_*文件权限需设为600,目录权限700)
3. 检查实例内部防火墙规则
即使外部防火墙开放了22端口,实例内部防火墙可能阻止流量:
- Ubuntu/Debian(ufw):
ufw status # 若未允许SSH,运行 ufw allow ssh ufw enable - CentOS/RHEL(firewalld/iptables):
# firewalld firewall-cmd --list-services firewall-cmd --add-service=ssh --permanent firewall-cmd --reload # iptables iptables -L -n | grep 22 # 若无允许规则,添加 iptables -A INPUT -p tcp --dport 22 -j ACCEPT service iptables save
4. 验证实例网络连通性
确认实例本身网络正常:
# 检查IP配置 ip addr # 测试对外联网 ping 8.8.8.8
如果无法联网,检查实例的网络标签是否正确关联允许出站流量的防火墙规则,或是存在路由问题。
5. 排查快照本身的问题
如果以上步骤都无效,说明快照中的系统可能存在底层问题:
- 创建一个正常的临时GCE实例
- 将问题快照创建为磁盘,挂载到临时实例上
- 挂载后检查磁盘中的
/etc/ssh/sshd_config、/var/log/auth.log等文件,查找配置错误或系统损坏问题 - 若发现配置错误,修改后重新创建镜像或快照,再恢复实例
内容的提问来源于stack exchange,提问作者Desenvolvimento Esallabs
相关产品推荐
相关产品推荐

