# SSH 公钥认证问题排查 ## 问题现象 ``` renjianbo@101.43.95.130: Permission denied (publickey). fatal: Could not read from remote repository. ``` ## 好消息 ✅ **SSH 连接已建立**(不再是连接超时),说明防火墙已修复! ❌ **公钥认证失败**,需要检查公钥配置。 ## 可能的原因 1. **公钥没有正确添加到 Gerrit** 2. **公钥格式问题** 3. **用户名不匹配** 4. **SSH 密钥路径问题** ## 解决方案 ### 步骤 1:确认公钥已添加到 Gerrit 1. **打开浏览器**,访问:`http://101.43.95.130:8080/#/settings/ssh-keys` 2. **检查**您的公钥是否在列表中,状态为 "Valid" 3. **如果没有**,请添加您的完整公钥: ``` ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDfjHZN+QcoRiE6yzSTi15/6iwa7sHQ6D0hlnnGFmzBiEhix+oPhpLM18SM6qKiTSC3KEIsAtjRMndWFOO/PnSsDtLWnBDxg8HWn1YhjDCz5VaCmMEA/Com8FGQPtSliI+6F+v1OOeaviL7V0iJcvZVPuIUrruNTfsZWOHrFhBrEeNwtrxwXcB3N5Hzw1/2c3AZ//5vPUf63FU0GNnNO8K2dTIJqfe80kprJtWXHGaj2OsV1T065LL24GYe65Hfngo8jf9HL1O1+ZUfNWrgJXKnr6U4cPOwpmuxcVa85OlXpxYOxcXWU20fu/ZgxzcvFYnONfnj2pI10j5ix1M2Vf1Ken5GP0WEHJUYUQ4bILbf1jKZRWqLgh0/nyAPikpcaYboqy3R4ZZjl+dC1JCXCzkmT69AiPzrvBWjlz2ygUwr45xoq7YJqLLjtFYJXf2KTgWczpJyDtWb4gXPJV1GAgaSHOrsswa3vlIQT3aOr0hmK7rKNXEcoySm1QV4GHcalfAybKvz9O9eXWxOlAY1JSzLA6fy8ziB3n+8wyIe44Pomro79m5w4R+C0XbrJ4owEzfnAAe1AcaIgQ4ik78idug0ZFQZ4s1YNYS/oQfDS8ZP5TanAC611ouO3XG1SUn6SkkKzG8ThQDr+igXFnShUrgYXKjLxifAj4wfl/wmg2NhXQ== your_email@example.com ``` ### 步骤 2:检查 SSH 密钥路径 在您的本地电脑上执行: ```bash # 检查 SSH 密钥是否存在 ls -la ~/.ssh/id_rsa* # 如果密钥文件不存在,重新生成 ssh-keygen -t rsa -b 4096 -C "your_email@example.com" ``` ### 步骤 3:使用 SSH 代理(如果密钥有密码) 如果您的 SSH 密钥设置了密码,需要启动 SSH 代理: ```bash # 启动 SSH 代理 eval $(ssh-agent -s) # 添加密钥 ssh-add ~/.ssh/id_rsa ``` ### 步骤 4:使用详细模式测试连接 ```bash # 使用详细模式查看具体错误 ssh -v -p 29418 renjianbo@101.43.95.130 gerrit version ``` 查看输出中的错误信息,特别是: - 是否尝试使用正确的密钥文件 - 服务器是否接受密钥 ### 步骤 5:检查用户名 确保 Gerrit 中的用户名是 `renjianbo`。可以访问: `http://101.43.95.130:8080/#/settings/profile` 查看您的 Username。 ### 步骤 6:尝试使用 Account ID 如果用户名有问题,可以尝试使用 Account ID: ```bash # 查看您的 Account ID(在 Settings → Profile 页面) # 假设是 1000001,使用: ssh -p 29418 1000001@101.43.95.130 gerrit version ``` ## 快速检查清单 - [ ] 公钥已添加到 Gerrit(`http://101.43.95.130:8080/#/settings/ssh-keys`) - [ ] 公钥状态显示为 "Valid" - [ ] SSH 密钥文件存在(`~/.ssh/id_rsa`) - [ ] 用户名正确(`renjianbo`) - [ ] 防火墙已开放 29418 端口(✅ 已完成) ## 如果还是不行 请提供: 1. `ssh -v -p 29418 renjianbo@101.43.95.130 gerrit version` 的完整输出 2. Gerrit SSH Keys 页面的截图 3. 您的 Gerrit Username(Settings → Profile)