ssh-key

ssh-key

本文将介绍的是如何在 mac 上上配置 SSH Key 中的 private key。

在 Mac 上配置 SSH Key 中的 private key

当往github的项目上提交代码时,github需要知道你电脑上有没有和那些Deploy keys中某个public key配对的private key。接下来就是配置怎样找到这个private key

  • 生成 1 个 SSH Key:
1
$ ssh-keygen -t rsa -C "youremail@xxx.com"

按回车后

1
2
3
4
5
6
7
8
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/localMac/.ssh/id_rsa): id_rsa_TestSSH_github(取个名字)
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in
id_rsa_TestSSH_github.
Your public key has been saved in
id_rsa_TestSSH_github.pub.

最好每次生成时都给SSH Key取个名字,这样后面在管理时自己也一目了然。我这里的格式是id_rsa_项目名_git提供方,我生成的所有key都遵循这个规则命名。建议你也有你自己的一种命名方式,并且保持统一。如果不取名字,默认的是id_rsa,如果后面生成时不命名,会把这个覆盖掉。密码可以不设置,免得每次提交时还要输入一次,安全性自己衡量吧。第一次生成key时,会在~目录下创建一个.ssh目录。

1
2
$ cd ~/.ssh
$ ls
  • id_rsa_TestSSH_github.pub添加到github对应的项目的Deploy keys中。
    Git-Add-DeployKeys.png

  • ssh服务器默认是去找id_rsa,现在需要把这个key添加到ssh-agent中,这样ssh服务器才能认识id_rsa_TestSSH_github

1
$ ssh-add -K ~/.ssh/id_rsa_TestSSH_github

这里为什么加上了一个-K 参数呢?因为在 Mac 上,当系统重启后会“忘记”这个密钥,所以通过指定-K 把 SSH key 导入到密钥链中

查看添加结果:

1
$ ssh-add -l
  • 创建本地的配置文件 ~/.ssh/config,编辑如下:
1
2
3
4
5
6
7
8
9
10
Host TestSSH.github.com
HostName github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_TestSSH_github
Host YourProjectName.gitlab.com
HostName gitlab.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_YourProjectName_gitlab

Host 的名字可以随意取,我这边按照的规则是项目名.git 服务器来源,接下来会用到这个名字。测试是否配置正确:

1
$ ssh -T git@TestSSH.github.com (就是刚刚你给Host取的名字)

敲一下回车,如下出现下面的提示就连接成功了:

1
Hi MrSeaWave/TestSSH! You've successfully authenticated, but GitHub does not provide shell access.

一定要注意哦,帐号名称/项目名称,如果这个 key 没有连接成功,它有可能提示的是别的 key 的。

  • 修改 github 项目配置,使项目本身能关联到使用的 key。

如果你在之前已经把项目 clone 到本地了,有两种解决方法:
(1) 打开项目目录/.git/config,将[remote “origin”]中的url中的github.com修改为TestSSH.github.com,就是你在第 4 步中给Host取的那个名字。如下:

1
2
3
remote "origin"]
url = git@TestSSH.github.com:MrSeaWave/TestSSH.git
fetch = +refs/heads/*:refs/remotes/origin/*

(2) 也可以在提交时修改

1
2
$ git remote rm origin
$ git remote add origin git@TestSSH.github.com:MrSeaWave/TestSSH.git

如果还没有 clone 到本地,则在 clone 时可以直接将github.com改为TestSSH.github.com,如下:

1
$ git clone git@TestSSH.github.com:MrSeaWave/TestSSH.git

Happy Coding😄

作者

Sea

发布于

2021-10-26

更新于

2023-01-10

许可协议

评论