0%

Git 使用指定的 SSH 密钥克隆和提交

Git 使用指定的密钥

默认情况,Git 会使用 ~/.ssh/id_ecdsa 来登录远程仓库,比如登录 github.com。我这里使用的是 ecdsa 算法,所以是 id_ecdsa

怎么样使用指定的密钥呢?比如使用 id_ecdsa_123。创建 ssh 配置文件 config 即可:

1
2
3
4
5
6
7
8
vim ~/.ssh/config

# 配置文件内容
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ecdsa_github
IdentitiesOnly yes

配置文件的含义:

  • Host github.com:指定一个主机
  • HostName github.com:上面指定的主机的主机名
  • User git:登录该主机的用户名,如果是登录 github.com,就必须是 git
  • IdentityFile ~/.ssh/id_ecdsa_github:关键配置,这里指定了使用哪个私钥文件
  • IdentitiesOnly yes:它指示 ssh 仅使用在命令行上指定的私钥文件或在 config 文件中配置的私钥文件

使用密钥克隆

配置完上面的 config 文件之后,就可以使用指定的私钥文件来克隆。比如:

1
git clone git@github.com:jasonz666/shell-utils

使用密钥提交修改

如果我们使用 HTTPS 方式克隆了一个仓库,而不是像上面那样使用 SSH 密钥方式。先要将 SSH 密钥登录远程服务器 github.com 的方式关联到本地仓库。执行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 进入本地仓库目录
$ cd shell-utils

# 查看已关联的远程仓库服务器
$ git remote -v
origin https://github.com/jasonz666/shell-utils (fetch)
origin https://github.com/jasonz666/shell-utils (push)

# 添加新的远程仓库服务器
$ git remote add ssh git@github.com:jasonz666/shell-utils

# 再次查看远程仓库服务器
$ git remote -v
origin https://github.com/jasonz666/shell-utils (fetch)
origin https://github.com/jasonz666/shell-utils (push)
ssh gitgit@github.com:jasonz666/shell-utils (fetch)
ssh gitgit@github.com:jasonz666/shell-utils (push)

使用 SSH 密钥方式提交:

1
$ git push ssh master

参考:

https://www.jianshu.com/p/82aa1678411e
https://www.howtoing.com/fix-ssh-too-many-authentication-failures-error