# 开放 Gerrit SSH 端口 29419 指南 ## 问题描述 Gerrit SSH 服务使用端口 29419,但防火墙阻止了外部访问,导致连接超时: ``` ssh: connect to host 101.43.95.130 port 29419: Connection timed out ``` ## 解决方案 ### 方法一:使用 firewall-cmd(推荐,适用于 CentOS 7) 如果系统使用 `firewalld` 管理防火墙: ```bash # 1. 添加端口到防火墙(永久生效) sudo firewall-cmd --permanent --add-port=29419/tcp # 2. 重新加载防火墙配置 sudo firewall-cmd --reload # 3. 验证端口是否已开放 sudo firewall-cmd --list-ports | grep 29419 ``` 或者直接运行脚本: ```bash sudo bash 开放端口29419.sh ``` ### 方法二:使用 iptables 如果系统使用 `iptables` 管理防火墙: ```bash # 1. 添加 iptables 规则 sudo iptables -I INPUT -p tcp --dport 29419 -j ACCEPT # 2. 保存规则(CentOS 7) sudo iptables-save > /etc/sysconfig/iptables # 3. 验证规则 sudo iptables -L -n | grep 29419 ``` 或者直接运行脚本: ```bash sudo bash 开放端口29419-iptables.sh ``` ### 方法三:云服务器安全组配置 如果使用云服务器(阿里云、腾讯云、AWS 等),还需要在云控制台配置: 1. **登录云控制台** 2. **找到安全组配置** 3. **添加入站规则**: - 协议:TCP - 端口:29419 - 源:0.0.0.0/0(或指定 IP 范围) - 动作:允许 ## 验证步骤 ### 1. 检查端口监听状态 ```bash # 检查 Gerrit 是否在监听端口 29419 netstat -tlnp | grep 29419 # 或 ss -tlnp | grep 29419 ``` 应该看到类似输出: ``` tcp6 0 0 :::29419 :::* LISTEN 29768/GerritCodeRev ``` ### 2. 测试 SSH 连接 从客户端测试连接: ```bash # 测试 SSH 连接 ssh -p 29419 renjianbo@101.43.95.130 gerrit version ``` 如果连接成功,会显示 Gerrit 版本信息。 ### 3. 测试 Git 推送 ```bash cd /d/zhini_im_android git push origin HEAD:refs/for/master ``` ## 常见问题 ### Q1: 执行 firewall-cmd 提示 "not running" **原因**:firewalld 服务未启动 **解决**: ```bash # 启动 firewalld sudo systemctl start firewalld sudo systemctl enable firewalld # 然后再执行开放端口命令 sudo firewall-cmd --permanent --add-port=29419/tcp sudo firewall-cmd --reload ``` ### Q2: 端口已开放但仍无法连接 **可能原因**: 1. **云服务器安全组未配置**:需要在云控制台配置安全组规则 2. **Gerrit 服务未启动**:检查服务状态 3. **端口被其他防火墙阻止**:检查是否有其他防火墙软件 **排查步骤**: ```bash # 1. 检查 Gerrit 服务状态 cd /home/renjianbo/gerrit_install/review_site bin/gerrit.sh status # 2. 检查端口监听 netstat -tlnp | grep 29419 # 3. 检查防火墙规则 sudo firewall-cmd --list-ports # 或 sudo iptables -L -n | grep 29419 ``` ### Q3: 如何临时关闭防火墙测试? **注意**:仅用于测试,生产环境不推荐! ```bash # 临时关闭 firewalld sudo systemctl stop firewalld # 临时关闭 iptables(不推荐) sudo iptables -F ``` 测试完成后,记得重新启动防火墙并正确配置规则。 ## 完整操作示例 ```bash # 1. 检查当前防火墙状态 sudo firewall-cmd --state # 2. 查看已开放的端口 sudo firewall-cmd --list-ports # 3. 添加端口 29419 sudo firewall-cmd --permanent --add-port=29419/tcp # 4. 重新加载配置 sudo firewall-cmd --reload # 5. 验证 sudo firewall-cmd --list-ports | grep 29419 # 6. 检查 Gerrit 服务 netstat -tlnp | grep 29419 # 7. 测试连接(从客户端) ssh -p 29419 renjianbo@101.43.95.130 gerrit version ``` ## 相关文档 - [Gerrit 安装使用指南.md](./Gerrit安装使用指南.md) - [SSH连接问题排查.md](./SSH连接问题排查.md) - [从码云推送到Gerrit指南.md](./从码云推送到Gerrit指南.md) ## 注意事项 1. ⚠️ **安全考虑**:开放端口后,确保 Gerrit 配置了适当的访问控制 2. ⚠️ **云服务器**:如果使用云服务器,必须同时配置云控制台的安全组 3. ⚠️ **端口冲突**:确认端口 29419 没有被其他服务占用 4. ✅ **持久化**:使用 `--permanent` 参数确保规则在重启后仍然有效