Git 配置 SSH 密钥连接远程仓库完整指南

2026-10-24

标签GitSSH密钥远程仓库命令行

使用 Git 推送代码到 GitHub、Gitee 等远程仓库时,很多人一直被「每次推送都要输入账号密码」困扰。其实 Git 官方推荐的 SSH 密钥方式可以一劳永逸解决这个问题:你只需要在本地生成一对密钥,把公钥添加到远程平台,之后所有推送与拉取都自动完成身份验证。整个配置过程大约五分钟,本文按步骤带你走完。

为什么要用 SSH 密钥而不是密码

使用 HTTPS 地址克隆和推送时,Git 每次都要校验你的账号密码;而 SSH 密钥采用「公钥+私钥」配对机制:私钥留在本机,公钥上传到远程平台,推送时 Git 自动用私钥签名、平台用公钥验签,全程不出现密码。

相比密码方式,它的优势很明显:不用每次输入凭据、不会被平台限时登出打断、配合密钥口令还能多一层保护。按 Git 官方与 GitHub 文档的说明,SSH 是远程协作推荐方式之一,尤其适合经常推送代码的开发场景。

第一步:检查本机是否已有密钥

Windows 打开 Git Bash,先看看是否已经生成过密钥:

ls -la ~/.ssh/

如果目录里已经有 id_rsa 和 id_rsa.pub 这一对文件,说明以前生成过,可以直接跳到第二步;如果提示目录不存在或文件缺失,就继续执行下面的生成命令。

第二步:生成 SSH 密钥对

在 Git Bash 中执行:

ssh-keygen -t rsa -b 4096 -C "你的邮箱"

-t rsa 指定密钥类型,-b 4096 指定 4096 位长度(比默认更安全),-C 后面的注释建议填邮箱方便识别。执行后会出现两处询问:

  1. 保存路径:直接回车使用默认路径 ~/.ssh/id_rsa 即可;
  2. 密钥口令(passphrase):可以留空直接回车,也可以设置一个口令给私钥加锁。

生成完成后,用下面命令查看公钥内容:

cat ~/.ssh/id_rsa.pub

把输出的一整行 ssh-rsa AAAA... 完整复制下来,后面要粘贴到远程平台。

第三步:把公钥添加到远程平台

以 GitHub 为例,登录网页后依次进入 Settings → SSH and GPG Keys → New SSH Key,在 Title 填个备注(比如「我的新电脑」),把刚才复制的公钥粘贴进 Key 输入框,点击 Add SSH Key 保存。

Gitee、GitLab、码云等平台的路径大同小异,基本都在个人设置的「SSH 公钥」或「SSH Keys」入口,进入后同样粘贴保存。

第四步:测试连接

公钥添加完成后,回到 Git Bash 测试是否生效:

ssh -T [email protected]

第一次连接会询问是否信任主机,输入 yes 回车即可。如果看到类似 Hi 用户名! You've successfully authenticated 的提示,说明密钥配置成功;如果提示 Permission denied (publickey),请检查公钥是否复制完整、有没有粘贴错平台。

第五步:把仓库地址切换为 SSH

ssh 测试通过后,用 SSH 地址连接远程仓库。首次克隆直接使用 SSH 地址:

git clone [email protected]:用户名/仓库名.git

已经用 HTTPS 地址克隆过的仓库,可以单独把 remote 改掉:

git remote set-url origin [email protected]:用户名/仓库名.git

改完可用 git remote -v 确认地址已变成 [email protected]:... 开头,之后 git push、git pull 都不再需要输入密码。

网络受限时:改用 443 端口连接

部分公司网络或运营商环境会封禁 SSH 默认的 22 端口,导致 ssh -T 一直超时。GitHub 官方提供 SSH over HTTPS 方案,通过编辑 ~/.ssh/config 文件把连接切到 443 端口:

Host github.com
Hostname ssh.github.com
Port 443
User git
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes

保存后重新执行 ssh -T [email protected],通常就能正常连接。这是 GitHub 官方文档明确给出的替代连接方式,Gitee 等国内平台一般不需要此步骤。

设置口令后不想每次输入:用 SSH agent

如果生成密钥时设置了口令(passphrase),之后每次推送都会被要求输入口令,多台机器操作时很麻烦。解决办法是把私钥加入本机的 SSH agent,让它记住口令:

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

第一条命令启动 SSH agent,第二条把私钥加载进去并输入一次口令,之后本次会话内的推送都不再要口令。Windows 10/11 用户还可以在「服务」里将 OpenSSH Authentication Agent 启动类型设为自动,并手动启动一次,让密钥常驻、重启电脑后依然免输口令,这是 SSH 官方提供的标准做法。

注意:把私钥常驻 agent 意味着本机登录状态下就能免密推送,公共电脑上不建议这样做;自己常用电脑开启即可。

常见问题与排查

推送时提示 Permission denied (publickey),按顺序检查三处:公钥是否完整粘贴到平台、添加公钥后是否在同一个账号下、本机私钥文件是否有读权限。

如果换过电脑或重新装过系统,旧电脑生成的密钥不再可用,需要在 GitHub 设置里删除旧公钥、在新电脑重新生成并添加。

密钥泄漏风险要重视:id_rsa 私钥文件绝不能发给任何人或传到公开仓库,一旦怀疑泄漏,立即在平台删除对应公钥并重新生成。

装完做这几件确认

  • [ ] ssh -T [email protected] 能显示 successfully authenticated
  • [ ] git remote -v 显示的地址是 [email protected]:... 格式
  • [ ] 执行一次 git push 不再提示输入账号密码
  • [ ] 私钥 id_rsa 只存在于本机 .ssh 目录