能用ssh连上远程仓库,前提是本地私钥、远程公钥、git远程地址三者对得上;缺一不可,错一个就提示permission denied (publickey)或连接超时。

能用 SSH 连上远程仓库,前提是本地私钥、远程公钥、Git 远程地址三者对得上;缺一不可,错一个就提示 Permission denied (publickey) 或连接超时。
生成密钥对必须用 ssh-keygen,别手动生成或复制别人密钥
私钥不是密码,不能“记住”或“共享”,必须由你本机生成:
-
ssh-keygen -t ed25519 -C "your_email@example.com"是当前推荐方式(比rsa更快更安全);若系统不支持 ed25519,再退回到ssh-keygen -t rsa -b 4096 - 全程按回车使用默认路径
~/.ssh/id_ed25519(Windows 是C:\Users\用户名\.ssh\id_ed25519),避免路径空格或中文导致后续失效 - 不要设密码(passphrase)——除非你愿意每次
git push都输一遍;设了就得配合ssh-agent启动并ssh-add ~/.ssh/id_ed25519 - 生成后务必检查:运行
ls -l ~/.ssh/(Linux/macOS)或进文件夹看,确保id_ed25519(私钥)权限是-rw-------,否则 SSH 会直接拒绝加载
公钥必须完整复制 id_ed25519.pub 内容,一行都不能少
常见错误是只复制了中间一长串字符,漏掉开头的 ssh-ed25519 或结尾的邮箱注释;Gitee/GitHub/GitLab 都依赖这整行做校验:
使用四维度框架评估任意 GitLab MR 或 GitHub PR 的复杂度:规模(20%),认知负荷(30%),审查工作量(30%),风险/影响(20%)...
- 用命令复制最稳:
cat ~/.ssh/id_ed25519.pub | clip(Windows Git Bash)或pbcopy (macOS) - 粘贴到 Gitee 的「SSH 公钥」页、GitHub 的「SSH and GPG keys」页时,Title 可随便写(如
work-laptop-win11),但 Key 内容必须原样 - 不要手动换行、删空格、加引号;如果看到
ssh-rsa AAAA...开头却没结尾邮箱,说明复制不全
远程地址必须是 git@xxx.com:username/repo.git 格式,不是 HTTPS
即使你已经配好密钥,只要 git remote -v 显示的是 https:// 地址,SSH 就完全不会被触发:
- 查看当前地址:
git remote -v - 替换成 SSH:
git remote set-url origin git@gitee.com:yourname/yourrepo.git(Gitee)或git remote set-url origin git@github.com:yourname/yourrepo.git(GitHub) - 注意:GitHub 的 SSH 地址域名是
github.com,不是ssh.github.com——后者只在 22 端口被墙时才需通过config文件重定向,且要改Port 443和Hostname ssh.github.com - 测试是否生效:执行
ssh -T git@gitee.com,成功返回类似Hi yourname! You've successfully authenticated...才算通
ssh -T 失败时,先查 config 文件和主机名解析
很多连接失败不是密钥问题,而是 SSH 客户端根本没走到认证那步:
- 检查
~/.ssh/config是否存在且格式正确:Host 名必须和远程地址里的域名一致(Host gitee.com对应git@gitee.com),大小写敏感 - 执行
ssh -T -v git@gitee.com(加-v查看详细过程),重点看输出里有没有debug1: Offering public key——没有就说明密钥根本没被加载 - Windows 上常见问题是 OpenSSH 服务未启用或被杀毒软件拦截;可临时关掉 Windows Defender 防火墙测试
- 公司网络有时会拦截 SSH 流量,此时
ssh -T卡在Connecting to...就得换网络或走 HTTPS(非推荐)
真正卡住的地方往往不在密钥生成,而在路径权限、config 拼写、远程地址格式这三处;反复失败时,优先用 ssh -T -v 看第一行输出,它会明确告诉你卡在哪一步。










