无法SSH连接GCP实例求助:sshguard拦截与端口22连接拒绝问题
解决GCP Ubuntu 14.04实例SSH连接被拒的分步方案
我帮你梳理下针对这个问题的分步解决方案——毕竟你试过了常规方法都没效果,得从底层入手排查,结合sshguard拦截、SSH服务异常以及Ubuntu 14.04的特性来处理:
第一步:通过串行端口绕过sshguard临时解锁IP
既然Web SSH和gcloud shell都失效了,GCP的串行端口是你直接访问实例系统的最后途径:
- 登录GCP控制台找到你的实例,点击编辑,在「远程访问」部分勾选启用连接到串行端口,保存后重启实例
- 回到实例详情页,点击连接到串行端口,打开控制台后输入你的Ubuntu用户名和密码登录(如果没设置过密码,登录后用
sudo passwd 你的用户名重置) - 登录后立刻停止sshguard并清空黑名单:
sudo service sshguard stop # 检查你的IP是否在拦截日志里 sudo grep "你的公网IP" /var/log/auth.log # 清空sshguard的黑名单数据库 sudo rm -f /var/lib/sshguard/blacklist.db
第二步:确保SSH服务正常运行并配置正确
端口22被拒绝很大概率是SSH服务没起来或者配置有误,针对Ubuntu 14.04做以下检查:
- 查看SSH服务状态:
sudo service sshd status - 如果服务未运行,手动启动并设置开机自启:
sudo service sshd start sudo update-rc.d sshd defaults - 检查
/etc/ssh/sshd_config的关键配置(先临时放宽权限方便测试):# 确保端口22开启 Port 22 # 允许密码登录(密钥有问题时临时用) PasswordAuthentication yes # 允许你的用户登录 AllowUsers 你的用户名 - 修改配置后重启SSH服务:
sudo service sshd restart
第三步:修复startup-script不生效的问题
之前的启动脚本没生效,大概率是脚本格式或执行逻辑的问题,按以下方式调整:
- 把自定义元数据里的
startup-script换成下面的内容(开头的#!/bin/bash必须保留,这是脚本执行的关键):#!/bin/bash # 停止并禁用sshguard,避免再次拦截 service sshguard stop update-rc.d sshguard remove # 确保SSH服务启动并设置自启 service sshd start update-rc.d sshd defaults # 清空sshguard黑名单 rm -f /var/lib/sshguard/blacklist.db - 手动测试脚本是否能正常运行,排查语法错误:
sudo bash -c "上面的脚本内容" - 如果还是不生效,查看启动脚本的执行日志找报错:
cat /var/log/cloud-init-output.log | grep -i error
第四步:长期解决sshguard拦截问题(可选)
如果不想完全禁用sshguard,可以配置它白名单你的IP:
- 编辑sshguard配置文件:
sudo nano /etc/sshguard/sshguard.conf - 添加白名单配置:
WHITELIST_FILE="/etc/sshguard/whitelist" - 创建白名单文件并添加你的IP:
echo "你的公网IP" | sudo tee /etc/sshguard/whitelist - 重启sshguard生效:
sudo service sshguard restart
重要提醒
Ubuntu 14.04在2019年就终止了所有官方支持,包括安全更新和软件维护,这可能导致SSH、sshguard等组件出现兼容性bug或安全漏洞,建议尽快迁移到GCP支持的Ubuntu版本(比如20.04或22.04),可以通过创建新实例再迁移数据的方式完成升级。
内容的提问来源于stack exchange,提问作者krrish
相关产品推荐
相关产品推荐

