删除default-allow-ssh规则恢复后,新老实例均无法通过浏览器SSH求助
遇到这种浏览器SSH连不上的问题确实头疼,尤其是新实例也中招,大概率不是常规的22端口防火墙问题——因为GCP的浏览器SSH是通过Cloud Identity-Aware Proxy (IAP) 转发流量的,和直接用本地SSH连22端口的逻辑不一样。咱们从这几个方向排查:
检查IAP SSH权限是否配置
浏览器SSH需要你(或者实例的服务账号)拥有roles/iap.tunnelResourceAccessor角色权限,这个是IAP隧道访问的必备权限。去IAM页面找到你的账号,确认是否已添加该角色;如果没有,手动添加后再试连接。确认防火墙规则是否包含IAP的IP段
重新添加的default-allow-ssh规则,源IP不能只设成你本地的IP——浏览器SSH的流量来自GCP的IAP代理IP范围35.235.240.0/20。检查你的规则是否把这个IP段设为允许的源,同时确保没有优先级更高的拒绝规则拦截了这个流量。实例的SSH服务是否正常运行
虽然默认Ubuntu实例应该自带启动的SSH服务,但也有例外情况。你可以通过GCP的串行控制台登录实例排查:- 打开实例详情页,找到「串行端口1」点击连接
- 登录后执行命令:
sudo systemctl status sshd,查看服务状态 - 如果服务未运行,启动它:
sudo systemctl start sshd,并设置开机自启:sudo systemctl enable sshd
验证防火墙规则的网络标签匹配
检查你重新添加的default-allow-ssh规则,目标标签是否和实例的网络标签一致。默认规则一般会设为「所有实例」(目标标签为空),但如果你的规则指定了特定标签,要确保实例也带有对应的标签。检查项目/实例的SSH密钥配置
GCP浏览器SSH会使用你账号关联的SSH密钥,或者项目元数据里的密钥。去项目/实例的元数据页面,查看ssh-keys项是否包含你的公钥;如果没有,生成一对SSH密钥,把公钥添加到元数据中再试。排除浏览器自身的问题
有时候浏览器的Cookie缓存、权限设置会影响IAP连接。试试用隐身模式打开浏览器重新连接,或者清除GCP相关的Cookie后再尝试。
内容的提问来源于stack exchange,提问作者u936293

