背景
当一台工作电脑需要通过SSH-Key方式登录多个git账号时,比如:
a. 一个mygit,用于公司内部比较隐私的工作开发;
b. 一个gitee,用于公司内部普通的工作开发;
c. 一个github,用于自己进行一些公开的分享的开发活动;
Git服务器部署在Linux服务器上。
解决方法
1. 生成一个公司用的mygit的SSH-Key
$ ssh-keygen -t rsa -C 'xxxx@company.com' -f ~/.ssh/mygit_id_rsa
2. 生成一个公司用的gitee的SSH-Key
$ ssh-keygen -t rsa -C 'xxxx@company.com' -f ~/.ssh/gitee_id_rsa
3. 生成一个github用的SSH-Key
$ ssh-keygen -t rsa -C 'xxxx@qq.com' -f ~/.ssh/github_id_rsa
4. 在用户目录 ~/.ssh 目录下新建一个名为config的文件,添加如下内容
# mygit Host 192.168.80.129 PreferredAuthentications publickey IdentityFile ~/.ssh/mygit_id_rsa # gitee,Host值为域名或者ip(必填);HostName值为域名或者ip(非必须);User值可任意(非必须) Host gitee.com HostName gitee.com User gitee PreferredAuthentications publickey IdentityFile ~/.ssh/gitee_id_rsa # github Host github.com PreferredAuthentications publickey IdentityFile ~/.ssh/github_id_rsa
5. 把.pub文件中的公钥字符串复制到对应平台(公钥文件.pub 可以删掉)。
对于公司内部搭建的git服务器,则复制到用户目录 ~/.ssh/authorized_keys 文件中(该文件如果没有,则需要手动创建)
6. 用ssh命令分别测试
$ ssh -T git@192.168.80.129
$ ssh -T git@gitee.com
$ ssh -T git@github.com
这里以gitee为例,成功的话会返回下图所示
ssh-keygen命令介绍:
格式:ssh-keygen -t rsa -C root@localhost -f ~/.ssh/id_rsa -P <密码>
-t:指定生成密钥类型(rsa、dsa)。默认为rsa
-f:指定存放私钥的文件名,默认为id_rsa。公钥文件名默认为私钥文件名加.pub后缀。~:代表用户目录。
-P:指定passphrase(私钥的加密密码),用于确保私钥的安全。默认为空。
-C:备注(非必须,可任意写)。默认为user@hostname。建议填写邮箱地址:youremail@example.com
PS:1. 密钥对是特殊的密码对,用于linux用户登录时的鉴权。
私钥(比较隐私)放在本地,公钥字符串则手动复制到公司的linux服务器的用户目录 ~/.ssh/authorized_keys 文件中(需要手动创建)
登录时就基于某用户名和密钥指纹进行私钥公钥的成对匹配,匹配通过则允许登录。
2.一般情况下,本地客户端可以使用同一个密钥(私钥),同时登陆gitee网站(仅限一个用户)、github网站(仅限一个用户)、公司git服务器(一个git用户)。