很多时候咱们对于不同的仓库需要用到不同的 ssh 密钥,比如区分个人用的 git 和公司用的 git ,或者在不同的 git 托管平台间切换等等情况。

遇到上述情况就需要在切换平台的时候同时切换 ssh 密钥,如果手动切换的话会比较麻烦,不过幸好的是咱们有多密钥管理的方法 ww

方法一:ssh-agent

一、准备密钥

可以将最常用的那个密钥设置为默认文件名 id_rsa (注意密钥文件都是成对存在的,比如 xxxxxx.pub ,其中无后缀文件为私钥,pub后缀文件为公钥,本文中只会同时提到一个文件,但如果要进行操作请两个文件同时操作)

将其他相对不太常用的密钥设置为其他文件名。

当然你也可以将所有密钥都命名一个自己的名字。

二、启动 ssh-agent

如果已经启动请跳过这一步

1
ssh-agent bash

三、ssh-add

将所有不是默认文件名的密钥通过 ssh-add 添加。(由于默认名称会读取,所以不需要添加)

1
ssh-add <filename>

补充

这种方法在 GitBash 关闭后 ssh-agent 就会关闭,下次打开 GitBash 就需要重新配置。可以说是麻烦死人(

如果是常开的 Linux 服务器还是可以考虑一下这个方法的~

方法二:config 配置文件

一、创建配置文件

/.ssh/ 下创建一个 config 文件。

二、配置

config 文件中加入你需要配置的内容:

Host
HostName
User
IdentityFile
PreferredAuthentications

在每一项后面直接加上自己需要的内容即可(按照惯例肯定还需要一个空格233),每项的释义如下:

Host:自定义的主机名

HostName:实际主机名

User:用户名

IdentityFile:密钥文件名

PreferredAuthentications:权限认证方式,值是 publickeypassword publickeykeyboard-interactive 其中之一。

补充

通过这个方法设置之后是永久有效的(当然除非你又改了配置文件的内容…)

设置以后会导致你使用 git 的时候需要对地址进行一些替换,而又因为这个方法永久有效很容易忘记…所以…也不是很友好

具体需要什么替换可以看下面的栗子~~


如果你的配置文件是这样子的

Host myhost
HostName coding.net
User ayaka@ayaka.com
IdentityFile ~/.ssh/id_rsa_coding
PreferredAuthentications publickey

那么你进行 ssh 测试的时候输入的 ssh -T [email protected] 就应当变成 ssh -T git@myhost

同样的,如果你和咱一样正在使用基于 Git 的静态博客部署,那么你的配置文件中关于 git 的地址也应该修改,比如说咱的:(咱用的是 Hexo ,具体配置文件内容请以你的配置文件为准)

修改前:

1
2
3
4
deploy:
type: git
repository: [email protected]:username/username.coding.me/reponame.git
branch: master

修改后:

1
2
3
4
deploy:
type: git
repository: git@myhost:username/username.coding.me/reponame.git
branch: master

按照上面的规则,其他任何需要用到 coding.net 的 ssh 相关的地方都应该修改成 myhost