Git配置多个ssh登录-windows
需求
经常搞多个项目并行开发的同学,肯定不少人和我一样,有过频繁切换Git账户、Git仓库的经历,过程很麻烦还容易出错。于是想探究一种方法能实现:
- 在windows机子上,操作Git拉取/推送远程仓库时不用手输账户密码
- 有多个远程Git仓库源(例如Github和Gitee)时能自动识别并登录。
- 同一个Git仓库源下,不同项目具有不同账户时,能自动识别并登录。
- 不必依赖
sourceTree
等工具,使用命令行就能操作(DevOps肯定需要)
答案就是:能实现,且不须要额外安装第三方软件。
原理
- 利用ssh实现自动登录Git服务器,配置在电脑用户目录下,就能全局生效
- 利用ssh的config文件来配置不同需求环境下的ssh登录策略,实现不同git源,不同账户的自动登录
其他方式?
- 为什么不使用
sourceTree
等工具?:个人认为sourceTree
这样的工具太大了,消耗大量电脑性能的同时,还必须手动界面操作,对于比较懒的程序员来说,这不能忍。另外,它不方便运维集成。 - 为什么不使用
git-flow
?:git-flow相对来说比较轻量,但是依旧配置麻烦,我是没研究出来可以实现需求的方法。
配置方法/示例
假定我们在Github
和Gitee
上分别各有两个账户:
# github
github_alpha github_bravo
# gitee
gitee_alpha gitee_bravo
再假定我们有A
、B
、C
、D
四个项目,分别使用上面的四个git账户关联远程仓库。
配置分为以下几个步骤
创建SSH密钥对
使用GitBash
或其他终端工具,进入到用户目录,
# 进入用户目录下的.ssh目录,如果没有就手动创建下
cd /c/ && cd $HOMEPATH/.ssh
# 为每个账户创建独立的密钥文件存储目录
mkdir -p github/alpha
mkdir -p github/bravo
mkdir -p gitee/alpha
mkdir -p gitee/bravo
分别为四个git账户生成密钥对,命令如下,执行四次,注意替换git账户名和目录路径
ssh-keygen -t rsa -C github_alpha
## 在提示中输入存储路径,不设密码
github/alpha/id_rsa
创建配置文件
在路径~/.ssh
目录下创建文件config
,并输入以下内容
:::warning
提示:GitBash命令终端下,使用vim可能不好复制、粘贴内容,则可以直接在windows的文件目录下找到~/.ssh/config
文件,并使用任何文本编辑器打开进行编辑。
:::
#github_alpha的配置,github域名下默认使用账户
Host github.com
HostName github.com
IdentityFile ~/.ssh/github/alpha/id_rsa
PreferredAuthentications publickey
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
User git
#github_bravo的配置。请注意 Host配置比较关键,
#所有使用github_bravo账户的项目,需要用这里Host的值替换远程Git仓库地址中的 host部分
Host github.com_bravo
HostName github.com
IdentityFile ~/.ssh/github/bravo/id_rsa
PreferredAuthentications publickey
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
User git
#gitee_alpha的配置,gitee域名下默认使用账户
Host gitee.com
HostName gitee.com
IdentityFile ~/.ssh/gitee/alpha/id_rsa
PreferredAuthentications publickey
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
User git
#gitee_bravo的配置。请注意 Host配置比较关键,
#所有使用gitee_bravo账户的项目,需要用这里Host的值替换远程Git仓库地址中的 host部分
Host gitee.com_bravo
HostName gitee.com
IdentityFile ~/.ssh/gitee/bravo/id_rsa
PreferredAuthentications publickey
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
User git
以上配置的重点在于每段配置中的Host
字段值,它是用来匹配项目中使用的Git仓库地址的(host部分),例如:
项目A: git@github.com/project_a
会使用 github_alpha
账户登录github
项目C: git@gitee.com_bravo/project_c
会使用 gitee_bravo
账户登录gitee
部署ssh公钥
分别登录github 和 gitee将 上述对应目录的id_rsa.pub文件配置到用户配置中,这个一般都在平台的个人安全设置中,如果是私域,就参考私域软件的文档。
测试
ssh -T git@github.com
ssh -T git@github.com_bravo
ssh -T git@gitee.cn
ssh -T git@gitee.cn_bravo
使用注意
- git仓库的地址需要使用 ssh的登录方式才有效。
关于安全
- 本文介绍的方法均为偏基础、偏底层一些的工具、命令,全世界通用,不须要额外安装任何其他软件
- 出于ssh密钥的安全考虑,我并没有制作相关快捷配置的工具,也不推荐大家使用任何第三方的、非知名厂家的配置工具(谁知道里面有没有后门),没必要也不安全。
- 有想法的同学可以基于以上原理,使用任何熟悉的脚本语言制作个人使用的配置工具, 相信别人不如相信自己!
作者交流
373804860@qq.com