在公司的托管平台gogs上,遇到一个任务需要用不同的账号进行操作和处理。这样就遇到一个问题了,死活没有办法在拉去代码的时候,提示输入用户,输入密码。
我的操作系统是mac、安装了git环境,用的软件是sourcetree。我就开始收集资料经过了一番排查。
官方资料
那么首先肯定是git官方资料:
Git-工具-凭证存储
Git是如何存储密码的?
官方说明了git的一个密码存储配置
- 默认
- cache缓存一段时间
- store本地明文缓存
- mac系统有钥匙串
- window等其他系统有类似的工具。
于是我排查了我的电脑果然是使用钥匙串,也就是当我第一次输入用户名和密码进行连接的时候,系统已经默认帮我记住了该网站对应的账户和密码,之后每次都进行输入。
所以我想改成默认的配置,发现死活不生效。于是遇到了第二个问题配置的优先级的问题
git默认有三个层级的配置:项目配置、全局配置、系统配置,一级会覆盖一级。但是mac系统中系统配置默认的就是钥匙串。于是乎无解。
所以得到了初步的解决方案:1. 在钥匙串里面删除密码访问记录,所有的仓库都会重新需要你输入密码。
使用ssh拉取镜像
ssh拉去的好处之一省去输入密码的操作,这点我是很喜欢的。于是我查了基本流程
- 使用ssh-keygen生产对应rsa的公钥和加密的私钥。公钥要配置到服务器(账户上)私钥要添加到本地ssh连接中。
- 创建后通过ssh-add加入到ssh-agent(每次系统开机生效)意味着重启需要重新输入密码
- 使用ssh-add -K 添加到钥匙串中,不过依旧每次都得重启。
- 使用终端连接脚本处理,只针对终端脚本有效。
- 使用ssh的config进行配置,针对域名使用钥匙串进行私钥验证,以及添加映射匹配进行两者的区分。完美实现。
参考文章:
Mac sourcetree自动添加ssh key
githubsshkey配置和使用
是否必须每次添加ssh-add
Mac下git通过SSH进行免密码安全连接github
对比下拉代码的三种方式:
http、https、ssh
我就查找了下这三种分别对比的优缺点:
http对比https
ssh协议为什么安全
期间我为了测试,使用gogs对应类似github的服务器
使用docker进行安装
用docker dao 进行镜像加速
下载docker gogs镜像进行配置
添加一张gogs配置时候的截图截图