背景
很多公司都选择git
作为代码版本管理工具,然后公司搭建私有的gitlab
来管理代码,我们有时候也有自己的git
需要管理,我们在clone
代码的时候可以选择http
协议,当然我们亦可以选择ssh
协议来拉取代码。这时候我们就需要生成多个ssh key
来满足需求。
解决方案
配置单个SSH Key
配置多个SSH Key
多数时候我们电脑上会有很多的git host
,比如公司gitlab
、github
、个人的等,那我们就需要在本地配置多个ssh key
,使得不同的host
能使用不同的ssh key
,做法如下(以gitlab
和github
为例):
-
生成
gitLab
生成的ssh key
ssh-keygen -t rsa -C 'yourEmail@xx.com' -f ~/.ssh/gitlab-rsa
-
为
github
生成的ssh key
ssh-keygen -t rsa -C 'yourEmail@xx.com' -f ~/.ssh/github-rsa
-
查看
user
目录下ssh
目录(隐藏文件)下是否存在config
文件,如果没有则需要生成config
文件。//生成config文件 touch config
-
在
config
文件中配置多个不同的host
使用不同的ssh key
。# gitlab Host gitlab.com Host gitlab HostName gitlab.com User xxx@qq.com PreferredAuthentications publickey IdentityFile ~/.ssh/gitlab-rsa.pub # github Host github.com Host github HostName github.com User xxx@qq.com PreferredAuthentications publickey IdentityFile ~/.ssh/github-rsa.pub # 配置文件参数 # Host : Host可以看作是一个你要识别的模式,对识别的模式,进行配置对应的的主机名和ssh文件 # HostName : 要登录主机的主机名( 服务器IP) # Port 22 : 端口 # User : 用户名 # IdentityFile : 指明上面User对应的identityFile路径,认证文件 # StrictHostKeyChecking : yes 关闭提示
注意⚠️:生成ssh key
时,-f ~/.ssh/gitlab-rsa
中~/.ssh/gitlab-rsa
是生成路径,必须正确。
问题
按照常规方法生成 ssh key
,并将 public key
添加到 git
账户中后,ssh
链接失败,一直报错 com@gitlab.com: Permission denied (publickey).
使用ssh -vvv git@gitlab.com
可调试 ssh ,结果如下:
通过调用ssh -vvv git@gitlab.com
查看详细的报错信息,我发现每次本地寻找私钥的时候都找不到对应的文件,但是这些文件的路径是正确的呀,我开始思考是不是在ssh_config
文件中没有设置对应的路径呢?
所以去etc\ssh\ssh_config
文件中查看,发现大部分全部被注释掉了。
解决办法
找到 ssh_config
文件,做出如下设置:
Host *
SendEnv LANG LC_*
IdentityFile ~/.ssh/github-rsa
IdentityFile ~/.ssh/gitlab-rsa
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
重新链接即可成功。
**注意⚠️:etc
在mac的根目录,ssh
在用户目录下的隐藏文件