那次我跟 SSH 杠上了——记一次 Git 推送的血泪史

发布时间:2026/6/13 16:13:45

那次我跟 SSH 杠上了——记一次 Git 推送的血泪史 那次我跟 SSH 杠上了——记一次 Git 推送的血泪史背景我想把我的代码传上 GitHub那天我写了个网络设备驱动准备推送到 Netmiko 项目。本以为是git push一下的事结果……故事就这么开始了。第一回合SSH 给我来了个下马威[rootk8s-122 gamepad]# git push -u origin main/usr/bin/ssh: /lib64/libselinux.so.1: no version information available gitgithub.com: Permission denied(publickey). fatal: Could notreadfrom remote repository.翻译成人话SSH 说“你谁啊我不认识你”我心里嘀咕不对啊我明明配置了 SSH 密钥的。赶紧检查# 检查 SSH 密钥ssh-add-l# 检查远程地址gitremote-v结果发现——远程地址确实是 SSH 格式的gitgithub.com:...但系统就是连接不上。第二回合诊断时间我寻思着可能是网络问题公司防火墙代理设置于是开始排查# 测试 GitHub 连通性pinggithub.com# 测试 SSH 端口nc-zvgithub.com22咦能通啊那为什么 SSH 连接失败然后我用了大招——开启 SSH 详细调试ssh-Tvvvgitgithub.com看到一堆握手失败的信息瞬间明白公司的防火墙把 SSH 给拦截了虽然 22 端口能通但 SSH 协议被深度检测给干掉了。第三回合换个思路——用 HTTPS 呗既然 SSH 走不通那就换条路。我决定用 HTTPS 方式# 1. 先把原来的 SSH 地址删了gitremote remove origin# 2. 换成 HTTPS 地址gitremoteaddorigin https://github.com/longsongline/gamepad_mapper.git# 3. 再推一次gitpush-uorigin main第四回合HTTPS 要我“交保护费”这次 SSH 的报错没了但又来了新问题Username for https://github.com: Password for https://github.com:这里有个大坑GitHub 从 2021 年起就不支持用密码登录了得用 Personal Access TokenPAT。于是我去 GitHub 生成了个 token打开https://github.com/settings/tokens点 “Generate new token”权限勾上repo和workflow复制 token注意这玩意儿只显示一次丢了就得重来第五回合终于成功了输入用户名粘贴 token 当密码Enumerating objects:96, done. Counting objects:100%(96/96), done. Delta compression using up to40threads Compressing objects:100%(93/93), done. Writing objects:100%(96/96),13.96MiB|4.41MiB/s, done. Total96(delta33), reused0(delta0), pack-reused0remote: Resolving deltas:100%(33/33), done. To https://github.com/longsongline/gamepad_mapper.git *[new branch]main -main Branchmainsetup to track remote branchmainfromorigin.Bingo代码终于传上去了经验教训总结SSH vs HTTPSSSH需要配置密钥但一次配置终身受益HTTPS需要 token但不容易被防火墙拦截那个 libselinux 警告/lib64/libselinux.so.1: no version information available这玩意儿只是个警告不是错误不影响 Git 功能。是系统库版本不匹配但能凑合用。GitHub token 小贴士token 生成后马上保存到密码管理器可以用git config credential.helper store让 Git 记住凭据token 有有效期记得及时续期如果再来一次我会……直接上 HTTPS别跟 SSH 死磕# 新建仓库时就用 HTTPSgitclone https://github.com/用户名/仓库名.git# 或者现有仓库切换gitremote set-url origin https://github.com/用户名/仓库名.git最后的最后这次折腾让我明白有时候最简单的方法就是最好用的方法。SSH 看起来高大上但在企业网络环境下HTTPS 往往更靠谱。血泪教训看到Permission denied (publickey)别急着怀疑人生先试试 HTTPS。十有八九能解决问题后记后来我发现其实 SSH 在公司内网也能用但得找 IT 开白名单。不过……何必呢HTTPS 不香吗

相关新闻