生成密钥
ssh-keygen -t rsa -C "邮箱地址" -f ~/.ssh/id_rsa_4github
ssh-keygen -t rsa -C "gallant@email.com" -f ~/.ssh/id_rsa_4gitlab
生成结果
-rw------- 1 gallant staff 2610 12 25 12:23 id_rsa_公司1
-rw-r--r-- 1 gallant staff 578 12 25 12:23 id_rsa_公司1.pub
-rw------- 1 gallant staff 2610 12 25 12:24 id_rsa_公司2
-rw-r--r-- 1 gallant staff 575 12 25 12:24 id_rsa_公司2.pub
公钥配置
将公钥配置到gitlab或者github上,配置方法不再赘述,直接简单的一个gitlab案例的截图吧
密钥账户配置
新建config文件,配置如下
# 公司1
Host gitlab.公司1.com
HostName gitlab.公司1.com
PreferredAuthentications publickey
# 密钥(不是公钥)
IdentityFile ~/.ssh/id_rsa_公司1
User gallant@公司1.com
# 公司2
Host git.公司2.com
HostName git.公司2.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_公司2
User gallant@公司2.com
配置完美,开始搞事,结果公司1的认证成功了,但是公司2报错了。。。
ssh -T git.公司2.com
gallant@公司2.com@git.公司2.com: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
很奇怪,最终发现公司2gitlab的域名虽然是:git.公司2.com,但是实际的git代码ssh地址是非域名(即ip形式的)。于是追加ip的配置至config
# 公司1
Host gitlab.公司1.com
HostName gitlab.公司1.com
PreferredAuthentications publickey
# 密钥(不是公钥)
IdentityFile ~/.ssh/id_rsa_公司1
User gallant@公司1.com
# 公司2
Host git.公司2.com
HostName git.公司2.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_公司2
User gallant@公司2.com
Host 192.168.0.1
HostName 192.168.0.1
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_公司2
User gallant@公司2.com
再次测试认证成功
验证踩坑
域名问题
公司1验证很流畅,看上去很ok,试了下clone代码也正常,但是公司2则不行
ssh -T gitlab.公司1.com
Connection to gitlab.公司1.com closed by remote host.
公司2验证链接报错
ssh -T 192.168.0.1
gallant@公司2.com@192.168.0.1: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
二者报错的提示信息不同,但是产生报错的原因是一样,是由于没有增加git前缀,增加git前缀后则正常返回结果
ssh -T git@gitlab.公司1.com
Welcome to GIT, gallant!
报错不同的原因是由于公司1代码ssh地址与gitlab库拥有相同的域名,而公司2则一个使用域名,一个使用ip
公司1域名
公司2域名
私钥配置问题
私钥配置成公钥报错
Cloning into 'virtual-number'...
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/gallant/.ssh/公司2.pub' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/gallant/.ssh/公司2.pub": bad permissions
git@192.168.0.1: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
跳板机配置
追加跳板机配置
Host prod
HostName jms-pro.公司2.com
Port 1010
User gallant
IdentityFile ~/.ssh/id_rsa_堡垒机
iTerm链接跳板机
ssh prod
总结
- 通过ssh命令验证免密登陆时取得不仅仅是公司git地址的域名,而是git代码源ssh地址的url,例如:git@域名或ip
- 一定要配置User信息,例如:gallant@公司1.com