告别密码和防火墙——将 Git 仓库从 HTTPS 切换到 SSH 连接
你是否遇到了这些问题?
- 每次
git pull或git push时,总被要求输入用户名和密码(或令牌)? - 在某些服务器上,可以
ping通 GitHub,但执行 Git 操作时却提示Connection timed out(连接超时)?
如果你遇到了以上任一情况,那么将你的仓库连接方式从 HTTPS 切换到 SSH,就是一劳永逸的最佳解决方案。
为什么 SSH 更好?
- 更便捷: 一次性配置,永久免密。SSH 使用密钥对进行认证,不再需要反复输入凭据。
- 更安全: SSH 密钥通常比密码更难破解,并且你可以随时撤销某个设备的访问权限。
- 更稳定: SSH 使用
22端口,而 HTTPS 使用443端口。很多服务器的防火墙会限制443端口的出站访问,但几乎所有服务器都默认开放22端口(因为 SSH 登录本身就需要它),可以轻松绕过网络限制。
切换步骤详解
第一步:在服务器上生成 SSH 密钥对
我们需要为服务器创建一个独一无二的“数字身份证”,即 SSH 密钥对(一个公钥,一个私钥)。
-
检查是否已存在密钥
运行ls -la ~/.ssh/id_rsa.pub。如果看到文件名,说明密钥已存在,可直接跳到第二步。如果提示No such file or directory,则需要创建。 -
生成新的 SSH 密钥
执行以下命令。过程中会提示你输入保存位置和密码,直接一路按回车键即可,无需设置密码。# 使用你的邮箱作为标签 ssh-keygen -t rsa -b 4096 -C "your_email@example.com"这将在
~/.ssh/目录下创建id_rsa(私钥) 和id_rsa.pub(公钥) 两个文件。
第二步:将服务器公钥 🔑 添加到 GitHub
这一步是让 GitHub 认识并信任你的服务器。
-
显示并复制公钥
在服务器上运行以下命令,它会打印出公钥的全部内容。cat ~/.ssh/id_rsa.pub完整地复制屏幕上显示的、以
ssh-rsa开头的所有文本。 -
添加到 GitHub
- 在浏览器中登录你的 GitHub 账户。
- 点击右上角头像 →
Settings。 - 在左侧菜单中,选择
SSH and GPG keys。 - 点击绿色的
New SSH key按钮。 - Title: 给这个密钥起一个你能识别的名字,比如
My Production Server。 - Key: 将刚才复制的完整公钥内容粘贴到这个大文本框中。
- 点击
Add SSH key完成添加。
第三步:测试 SSH 连接 🔗
在修改项目配置前,先验证一下服务器能否与 GitHub 成功“握手”。
ssh -T git@github.com
- 首次连接:你很可能会看到一个关于主机真实性的提示。这是正常的,输入
yes并按回车。 - 成功信息:如果一切顺利,你会看到
Hi <你的用户名>! You've successfully authenticated...的欢迎语。这表示你的 SSH 通道已经畅通无阻!
第四步:修改项目的远程仓库地址
现在,我们把你本地项目的“联络地址”从 HTTPS 网址换成 SSH 地址。
-
进入你的项目目录
cd /path/to/your/repository # 比如:cd /www/wwwroot/www.site.cn -
查看当前的远程地址
运行git remote -v,你会看到它现在是https://开头的。origin https://github.com/username/site.git (fetch) origin https://github.com/username/site.git (push) -
执行修改命令
使用git remote set-url命令进行切换。# 格式为 git@github.com:用户名/仓库名.git git remote set-url origin git@github.com:username/site.git -
再次验证
再运行一次git remote -v,确认地址已经成功更新。origin git@github.com:username/site.git (fetch) origin git@github.com:username/site.git (push)
第五步:成功!✅
现在,你的仓库已经完全切换到了 SSH 模式。试着运行一次 git pull:
git pull
你会发现,它不再需要你输入任何用户名或密码,也不会再出现连接超时的错误,直接就开始了数据传输。
恭喜你,从此享受丝滑的 Git 操作体验吧!
