配置密钥实现免密操作
# 配置密钥实现免密操作
本文介绍如何在本地电脑上生成 ssh 秘钥并配置到 GitHub,实现免密 pull、push 代码。
Git 支持 https 和 git 两种传输协议,例如在 GitHub 在 clone 代码时会有两种协议可选:
- Clone with HTTPS:
https://github.com/[your-github-id]/[repo-name].git
- Clone with SSH:
git@github.com:[your-github-id]/[repo-name].git
若使用 https 协议,每次 pull、push 代码均提示要输入密码;若使用 git 协议,然后通过 ssh 密钥对认证,即可实现免密操作。
本文面向使用 git 协议的情况,我平时不是通过该协议操作的,因此仅是验证了一下操作步骤。
配置 Git 通过 ssh 协议免密需要三个步骤:
- 生成密钥对
- 配置远程仓库(这里使用 GitHub)上的公钥
- 把 Git 的 remote url 修改为 git 协议
- 上面两个步骤初次设置过以后,以后使用都不需要再次设置;此步骤视以后项目的 remote url 而定,如果以后其他项目的协议为 https 则需要此步骤。
下面具体介绍每一步骤:
# 本地生成 ssh 秘钥
打开终端,执行 ssh-keygen -t rsa -C "你在GitHub上使用的邮箱地址"
,如果执行成功,切换到 ~/.ssh
目录下,此时目录应该如下所示。
├── id_rsa # 私钥
├── id_rsa.pub # 公钥
└── known_hosts # 记录每个你访问过的计算机的公钥(public key),防止 DNS 攻击
2
3
# 添加公钥到自己的远程仓库(GitHub)
复制公钥(id_rsa.pub
)的内容,访问 GitHub,依次进入:Settings --> SSH and GPG keys --> New SSH key
。
Title
随便填写(有意义方便区分即可),公钥粘贴到的 Key
文本域内,点击 Add SSH key
按钮,这一步就完成了将你的公钥放到了 Github 上进行托管。
(Add SSH key)
# 修改 git 的 remote url
在本地的某个仓库目录内使用命令 git remote -v
查看你当前的 remote url:
origin https://github.com/[your-github-id]/[repo-name].git (fetch)
origin https://github.com/[your-github-id]/[repo-name].git (push)
2
如果是以上的结果那么说明此项目是使用 https 协议进行访问的(如果地址是 git 开头则表示是 git 协议)。
登陆你的 GitHub,在上面可以看到仓库的 ssh 协议相应的 url,复制查询到的 ssh 链接,然后使用命令 git remote set-url
来调整 url:
git remote set-url origin git@github.com:[your-github-id]/[repo-name].git
再次使用命令 git remote -v
查看一下,url 是否已经变成了 ssh 地址:
origin git@github.com:[your-github-id]/[repo-name].git (fetch)
origin git@github.com:[your-github-id]/[repo-name].git (push)
2
接下来就可以愉快地使用 git fetch,git pull,git push,不用再输入密码。
# 后记
和 https 拉取方式不同的是,https 方式需要每次提交前都手动输入用户名和密码,ssh 的方式配置完毕后 Git 都会使用你本地的私钥和远程仓库的公钥进行验证是否是一对秘钥,从而简化了操作流程。
但是如果使用的是 Windows 电脑,在使用 ssh 的方式登录过一次后,Windows 操作系统的凭据管理器会记录我们的登录信息,下次操作就不用频繁输入账号密码了。这很方便,所以我一般还是采用 ssh 的方式来操作 Git。
(完)