You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

AWS EC2(Ubuntu16.04)无法向Bitbucket执行Git操作,提示网络不可达

解决EC2 Ubuntu 16.04连接Bitbucket SSH端口22失败的问题

遇到ssh: connect to host bitbucket.org port 22: Network is unreachable这个报错,核心问题是你的EC2实例无法通过22端口访问Bitbucket的服务器,咱们一步步排查解决:

1. 先验证基础网络连通性

首先确认实例能不能解析Bitbucket的域名并连通:

  • 执行ping bitbucket.org,如果没有响应,说明DNS解析有问题或者实例根本没法访问公网。如果能ping通,再测试22端口的连通性:
  • telnet bitbucket.org 22或者nc -zv bitbucket.org 22,如果显示连接失败,说明22端口的流量被拦截了。

2. 检查EC2安全组的出站规则

EC2的安全组是控制实例流量的第一道关卡,你需要确保安全组的出站规则允许TCP 22端口的流量出去:

  • 登录AWS控制台,找到你的EC2实例对应的安全组
  • 切换到“出站规则”标签,确认有一条规则允许0.0.0.0/0(或者Bitbucket的IP段)的TCP 22端口流量
  • 如果没有,添加一条出站规则:类型选SSH,端口范围22,目标选0.0.0.0/0,保存后再测试

3. 检查VPC网络ACL配置

如果安全组没问题,再看VPC的网络ACL(这是更底层的防火墙):

  • 网络ACL是双向的,需要同时配置入站出站规则:
    • 出站规则:允许TCP 22端口的流量到任意地址(0.0.0.0/0)
    • 入站规则:允许TCP 1024-65535端口的流量(因为SSH返回流量会用临时端口)
  • 确保没有拒绝22端口出站的规则,网络ACL的拒绝规则优先级高于允许规则

4. 尝试使用Bitbucket的备用SSH端口(443)

很多环境会默认封锁22端口,但443端口通常是开放的(因为要走HTTPS)。Bitbucket支持通过443端口走SSH,有两种设置方式:

方式一:修改单个仓库的远程地址

把原来的Git远程地址:

ssh://git@bitbucket.org/your-username/your-repo.git

改成:

ssh://git@altssh.bitbucket.org:443/your-username/your-repo.git

执行命令修改:

git remote set-url origin ssh://git@altssh.bitbucket.org:443/your-username/your-repo.git

方式二:全局配置SSH(所有仓库通用)

在实例的~/.ssh/config文件中添加以下内容(如果文件不存在就创建一个):

Host bitbucket.org
    Hostname altssh.bitbucket.org
    Port 443

保存后,Git会自动用443端口连接Bitbucket,不需要修改每个仓库的地址。

5. 检查实例本地防火墙(UFW)

Ubuntu 16.04默认用UFW防火墙,可能它禁止了出站的22端口:

  • 查看UFW状态:sudo ufw status
  • 如果看到有拒绝22端口出站的规则,执行sudo ufw allow out 22/tcp开放端口
  • 或者临时关闭UFW测试:sudo ufw disable,如果关闭后能连接,再调整UFW规则

6. 额外验证:确认SSH密钥配置(非核心,但排除可能性)

虽然这个报错是网络问题,但如果前面步骤都没问题,可以确认下你的SSH公钥已经添加到Bitbucket的账户中:

  • 在实例上执行cat ~/.ssh/id_rsa.pub(如果你用的是默认密钥对)
  • 登录Bitbucket,进入个人设置的SSH密钥页面,确认这个公钥已经存在

按照上面的步骤排查,基本能解决网络不可达的问题。


内容的提问来源于stack exchange,提问作者Prathmesh

火山引擎 最新活动