http/https协议下免输入使用Git
2017-12-21 14:50:42 +08 字数:941 标签: Git在一些条件下,不方便使用ssh协议来获取、更新Git库。 实际上,也只有在少数特定的个人电脑、工作站上才适合这样做,对服务器与临时电脑都是不合适的。
使用ssh协议,需要先生成公私秘钥,并且把公钥配置到托管Git库的平台上。 准备工作比较麻烦,准备好后就很方便,适合个人电脑、工作站。
而在临时电脑,这样不仅不方便,还有安全问题。 所以,临时电脑上通常使用http/https协议来操作Git库,每次做远程操作时都需要输入账户、密码。 这样会很麻烦,但胜在安全。
在服务器上,需要脚本来自动运行时,手工输入就显得不合适了。 配置ssh密钥对于单台服务器还是可以的,但对于集群来说就不能接受。
其实,Git本身也是支持凭据存储功能的,参考《Git - 凭证存储》,解决方案就在其中。
临时电脑选cache ¶
git config --global credential.helper cache
默认情况下,会有900秒、也就是15分钟的缓存时间。
也可以在cache
后增加--timeout 1800
,提升到30分钟,乃至更长时间。
相比每次远程交互都需要输入账户密码,cache
要方便许多,也很安全。
服务器选store ¶
git config --global credential.helper store
默认情况下,store
会把信息明文保存在~/.git-credentials
文件,大致形式如下。
$ cat ~/.git-credentials
https://USERNAME:PASSWORD@github.com
其实,这就是个带用户、密码的URL。
如果把USERNAME:PASSWORD@
这个信息,写到Git库的.git/config
文件中去,也可以达到相同的目的。
玩花样 ¶
store
可以接受--file
参数,指定文件位置。
这可以玩出两种花样。
『U盾』 ¶
[credential]
helper = store --file /media/$USERNAME/myusb/.git-credentials
helper = cache --timeout 1800
利用U盘(比如叫myusb)保存.git-credentials
文件(当然也可以叫其它名称),即插即用。
如果没插U盘,则输入账户、密码,缓存30分钟。
是不是有一点『U盾』的感觉?
托管鉴权文件 ¶
明文保存的鉴权文件,其安全性由服务器的安全性来保障。
但是,每间隔一段时间修改一次密码,也是必要的策略。
然而,每次修改密码,就要对整个集群所有需要的用户,更新~/.git-credentials
文件……想想也是一件很可怕的事!
[credential]
helper = store --file /mnt/git/.git-credentials
把.git-credentials
文件,托管到某一台机器上,并且在所有机器上都mount到/mnt/git
这个位置。
再加上以上配置,就可以实现鉴权文件的统一管理。