社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

Git拾遗:一机多SSH-Key管理

coder_pig • 7 年前 • 659 次点击  

一句话概括本文

在需要用到多个ssh-key的场景,通过配置config文件解决此问题。


引言

关于Git的使用总结以前已经写过一篇文章了:小猪的Git使用总结
应付日常开发基本够用了,但在实际开发中,会遇到各种各样的问题。
比如我司最近把项目都从自己的Gitlab服务器上迁移到码云上,就遇到
了一个问题:多个SSH-key管理的问题。一般来讲呢,一个ssh-key是
可以用在多个Git服务器的,这东西只是用于加密访问,只要服务器上的
公钥能够和本地的私钥配对就可以了。但是呢,不同的账号不能用一样的
公钥

如果你用过Git提交代码,相信你对SSH Key不会陌生,在Clone项目的
时候可以看到有两种可选协议 HTTPS和SSH

链接是这样的:

https://gitee.com/xxx/YYY.git
git@gitee.com:xxx/YYY.git

走Https协议,可以clone任何项目,但是Push时需要输入账号密码
走ssh协议,必须是项目的拥有者和管理员才能clone,配置了ssh-key的话,推送的
时候,不用输入账号密码(前提是你在配置ssh-key的时候没有设置密码),直接就能提交。

可以通过下面简单的命令创建一个ssh-key

cd ~/.ssh

# 如果路径不存在的话,键入下述命令创建ssh文件夹
mkdir ~/.ssh

# 键入下述命令生成ssh-key的公钥和私钥
# 会让你依次输入文件名,密码,密码,结束后默认生成id_rsa和id_rsa.pub
ssh-keygen -t rsa -C "xxx@xxx.cn"

# 你还可以写得简短点直接把名字写在命令后
ssh-keygen -t rsa -C "xxx@xxx.cn" -f ~/.ssh/id_rsa_xx

# 上面这个命令就会生成id_rsa_xx和id_rsa_xx.pub的私钥和公钥了。

ssh-key创建完后,需要打开公钥,复制里面的内容,然后贴到你Gitlab,Github,
码云的SSH-Key配置页,比如我的:

配置成功后,命令行键入:

ssh -T git@gitee.com

如果出现这样的提示,说明配置完成~


问题来了

一般来讲,除了公司仓库外,开发者一般也会有自己的Git仓库,比如我有自己的
Github码云coding.net,如果是一样的邮箱,那还好,
可以git remote add 命令添加分支别名,比如:

git remote add origin xxx@xxx.git
git remote add osc yyy@yyy.git

然后push或者pull的时候手动指定远程仓库对应的分支即可

git push origin master
git pull osc master

但是问题来了,公司邮箱和自己邮箱不一样,如果你直接执行
上面那个ssh-keygen -t rsa -C "xxx@xxx.cn"创建是会覆盖掉原先的ssh-key,
然后出现公司项目能Push,自己项目不能Push的问题。

解决方法如下

  • Step 1:假设我有一个自己的账号和公司账号,通过下述命令可以创建两个不同的ssh-key
ssh-keygen -t rsa -C "xxx@xxx.xxx" -f ~/.ssh/id_rsa_my
ssh-keygen -t rsa -C "yyy@yyy.yyy" -f ~/.ssh/id_rsa_work
  • Step 2设置ssh key代理
ssh-add -l

# 如果提示:Could not open a connection to your authentication agent.
# 键入下述命令:
exec ssh-agent bash
  • Step 3:添加私钥
ssh-add ~/.ssh/id_rsa_my
ssh-add ~/.ssh/id_rsa_work

# 键入上面的ssh-add -l可以查看所有ssh-key代理
# 键入ssh-add -D 可以删除所有代理
  • Step 4:把公钥(.pub)内容复制到你远程仓库的里

  • Step 5:添加编辑配置文件config

# bash里可以用touch新建,ubuntu里可以用gedit~
vim ~/.ssh/config

# 文件内容
# work
Host gitee
    HostName gitee.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_work
    user git
# my
Host github
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_my
    user git
    
# 配置文件参数
# Host:对识别的模式,进行配置对应的的主机名和ssh文件
# HostName:登录主机的主机名
# PreferredAuthentications:设置登录方式,publickey公钥,改成password则要输密码
# IdentityFile:私钥全路径名
# User:登录名
    
  • Step 6:配置完成后依次键入下述命令进行验证,看下是否生效
ssh -T git@gitee.com
ssh -T git@github.com

到此就配置完毕啦~


还有一点

对了,有些小伙伴会把这个ssh-key和提交代码的人混淆,因为在配置ssh-key的命令
后面跟了一串邮箱,以为这就是提交author的邮箱,其实不然,这个东西是通过
git config命令进行设置的!git服务器会根据配置文件的user.email和user.email
来设置提交者的信息!

git config user.name "CoderPig" //用户名
git config user.email  "coderpig@xxx.com"   //邮箱


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/CWrimDu7Yh
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/11350
 
659 次点击