之前我本地使用ssh
生成的密钥默认是给github用的,也不需要繁琐的配置。但是如果密钥需要提供给多个平台使用呢?比如gitlab、gitee、github等平台,或者我们需要免密登陆云服务器如阿里云、腾讯云。这时候,我们就需要自己做一些配置了。下面是今天碰到的坑,记录一下。
在此之前,我们需要准备一些环境和平台,下面以我今天测试的为例:
接下来就是详细的操作了。
首先我们右键点开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的设置:
然后新建一个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.pub
和 tencentCloud_key和tencentCloud_key.pub
。那我们的win10电脑是如何知道使用哪个密钥去登陆对应的平台呢?下面就要介绍一个很重要的文件了。
接下来我们在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
一些重要字段说明:
接下来我们需要把私钥添加到ssh-agent
:
# 添加腾讯云的私钥
ssh-add ~/.ssh/tencentCloud_key
# 添加github的私钥
ssh-add ~/.ssh/github_key
# 可以查看刚刚添加的信息
ssh-add -l
测试github:
ssh -T [email protected]
第一次测试会有个警告,选择yesy就是了,之后会生成known_hosts
,把github的域名和ip添加到文件里面。
测试腾讯云
ssh tencentCloud
直接连接到了服务器。
到这基本完成了git的多密钥管理,但不可能是一帆风顺的,谁还遇到个Bug呢?下面就看看我遇到的问题。
说明:以下命令都在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:错误:权限被拒绝(公钥)。
还是不能解决的话,进行下面的操作:
.ssh
目录包括目录下的所有文件ssh-add -D
清除所有私钥上面的方法可以解决大部分问题,我今天就是卡在了第二个问题上,足足浪费了我一天…多亏知乎大哥们的解答,我才解脱出来。下面我贴几个解决问题的文章作为参考,希望大家可以认真看一下。
最后,本人也是技术菜鸡,写这篇文章是为了以后踩更少的坑,加油吧~
【1】Github:错误:权限被拒绝(公钥)
【2】git 配置多个SSH-Key
【3】github提示Permission denied (publickey),如何才能解决?
【4】Git管理多个SSH密钥,Git多帐号配置
【5】Windows下 SSH 通过密钥登录 Linux 服务器