git多密钥管理

1. 前言

之前我本地使用ssh生成的密钥默认是给github用的,也不需要繁琐的配置。但是如果密钥需要提供给多个平台使用呢?比如gitlab、gitee、github等平台,或者我们需要免密登陆云服务器如阿里云、腾讯云。这时候,我们就需要自己做一些配置了。下面是今天碰到的坑,记录一下。

2. 准备

在此之前,我们需要准备一些环境和平台,下面以我今天测试的为例:

  • git bash
  • window 10
  • 腾讯云
  • github

接下来就是详细的操作了。

3. 生成密钥

首先我们右键点开git bash终端,输入:

# 后面是你的邮箱
ssh-keygen -t rsa -C "xxxx.com"

接下来我们会看到:

Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa): 

如果直接回车,将默认在上面路径下产生一个id_rsa的文件。但这里我们为了配置多密钥,需要重新指定一个路径(绝对路径)存放我们的密钥,比如给github使用的密钥对:

/c/Users/Administrator/.ssh/github_key

接下来一路回车就好,然后就会在你刚刚输入的路径下生成一对密钥。我们在git bash中输入以下命令复制公钥先:

# 切换到.ssh目录
cd ~/.ssh

# 打印github_key.pub文件内容,并且复制
cat github_key.pub

之后我们需要在github中点击头像下面的Settings,找到SSH的设置:

git多密钥管理_第1张图片
然后新建一个SSH key,把刚刚复制的公钥粘贴到里面,保存就好了。

同样地我们用上面的办法再生成一对名为:tencentCloud_key的密钥,登陆我们的Linux云服务器:

# 默认端口是22,如果云服务器的ssh端口修改了需要换成其他端口
# username 是用户名 ip是云主机地址
ssh -p 22 <username>@<ip>

登陆之后,我们需要切换到.ssh目录下创建一个authorized_keys,:

# 切换到.ssh目录
cd ~/.ssh

# 创建authorized_keys
touch authorized_keys

# 编辑文件,把`tencentCloud_key.pub`内容复制到里面
# 编辑好后按ESC退出编辑,然后按`:wq`保存
vi authorized_keys

此时,在我们win10电脑.ssh目录下面有以下文件: github_key/github_key.pubtencentCloud_key和tencentCloud_key.pub。那我们的win10电脑是如何知道使用哪个密钥去登陆对应的平台呢?下面就要介绍一个很重要的文件了。

4. 创建config文件

接下来我们在win10电脑切换到.ssh目录下创建一个文件config,然后进行以下配置:

# github
Host github.com
    HostName github.com
    User <username>
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/github_key

# tencentCloud
Host tencentCloud
  Port <server port>
  HostName <server ip>
  User <username>
  IdentityFile ~/.ssh/tencentCloud_key
  IdentitiesOnly yes

一些重要字段说明:

  • Host :填写你平台的名字
  • HostName :填写你平台所在的域名或者ip地址
  • Port: 如果不填默认是22,如果平台的ssh更改了默认的端口你需要加上
  • User: 平台上的用户
  • PreferredAuthentications :使用什么方式鉴权
  • IdentityFile :私钥的位置

5. 添加私钥

接下来我们需要把私钥添加到ssh-agent

# 添加腾讯云的私钥
ssh-add ~/.ssh/tencentCloud_key

# 添加github的私钥
ssh-add ~/.ssh/github_key

# 可以查看刚刚添加的信息
ssh-add -l

6. 测试

测试github:

ssh -T [email protected]

第一次测试会有个警告,选择yesy就是了,之后会生成known_hosts,把github的域名和ip添加到文件里面。

测试腾讯云

ssh tencentCloud

直接连接到了服务器。

到这基本完成了git的多密钥管理,但不可能是一帆风顺的,谁还遇到个Bug呢?下面就看看我遇到的问题。

7. 常见问题(针对win10)

说明:以下命令都在git bash中执行。

1. 添加私钥的时候,执行ssh-add时提示Could not open a connection to your authentication agent

先尝试下面命令:

ssh-agent bash

如果不行的话尝试下面命令:

eval $(ssh-agent)

然后再使用ssh-add添加私钥。

2.使用ssh -T [email protected]测试github的时候出现Permission denied (publickey)

第一呢,先看下官方的步骤:Github:错误:权限被拒绝(公钥)。

还是不能解决的话,进行下面的操作:

  • 删除win10下.ssh目录包括目录下的所有文件
  • 使用ssh-add -D清除所有私钥

上面的方法可以解决大部分问题,我今天就是卡在了第二个问题上,足足浪费了我一天…多亏知乎大哥们的解答,我才解脱出来。下面我贴几个解决问题的文章作为参考,希望大家可以认真看一下。

最后,本人也是技术菜鸡,写这篇文章是为了以后踩更少的坑,加油吧~

8. 参考

【1】Github:错误:权限被拒绝(公钥)
【2】git 配置多个SSH-Key
【3】github提示Permission denied (publickey),如何才能解决?
【4】Git管理多个SSH密钥,Git多帐号配置
【5】Windows下 SSH 通过密钥登录 Linux 服务器

你可能感兴趣的:(Git)