如何设置 gitlab 的 deploykey,实现免密码 git pull 代码?
发布于 作者:苏南大叔 来源:程序如此灵动~
苏南大叔又来讲述运维部署的秘传绝技了。本文讲述的是:如何在运维代码层面上,免密码git pull代码。其实就是运维专属的git pull方案好了。好处就是:可以方便集成各种运维工具,做到代码自动化部署。

本文涉及的道具是:一个gitlab服务,一个代码分发服务器。在gitlab上的目标项目是project/demo。本文就不说gitlab的部署了,内容比较复杂,苏南大叔会在其它文章里面提及。
设置代码分发服务器
因为该服务器是用于代码分发的,那么在这个服务器上面,需要设置一个ssh的公钥私钥。那么,请查看这个系统目录,~/.ssh/。看看,该目录下面,是否有文件~/.ssh/id_rsa.pub存在。
如果这个目录下面没有配置好id_rsa.pub文件的话,在服务器上项目的根目录下面,使用git pull的时候,就会要求输入密码。而苏南大叔的目标是:设置无密码拉取git项目代码。
ls -al ~/.ssh/如果没有看到id_rsa.pub文件,那么执行下面的命令。
ssh-keygen -t rsa -P ""ssh-keygen这个命令,可以在任意地方执行。执行的结果就是在~/.ssh/目录下生成key信息。命令执行完毕后,苏南大叔需要查看~/.ssh/id_rsa.pub这个文件的内容。
cat ~/.ssh/id_rsa.pub 设置gitlab的deploykey
deploy的英文意思就是:部署。本步骤的主要内容,就是设置gitlab的deploykey,就是部署的密钥。
在上一步操作中,苏南大叔得到了id_rsa.pub这个文件的内容。接下来,苏南大叔要使得deploykey在gitlab里面生效。
进入到gitlab,找到对应的项目页,左侧菜单,settings=>repository=>Deploy Keys。

title可以随便写,内容Key填写~/.ssh/id_rsa.pub的正文。后面的Write access allowed的写权限,是否支持,请自行选择。常理来说,不应该设置写权限。

当同一个测试服务器,要免密码拉取两个以上的项目的话,那么需要设置的Deploy Keys。需要到已有的Privately accessible deploy keys里面,选择已有的Deploy key,然后点击enable按钮,即可在第一个tabEnabled deploy keys里面,看到新生效的key了。

上述这个操作的意思就是说:Enabled deploy keys中的内容,是真正生效的key。而Privately accessible deploy keys里面,已经应用在其它项目上的key,这些key也是可以重复使用的。重复使用后,一个部署机的上的公钥,就可以拉取多个项目的内容了。
设置好deploykey之后,就可以在代码分发服务器上,免密码拉取git代码了。
设置代码分发服务器
这个代码分发服务器,就是第一步中,设置~/.ssh/目录内容的服务器。然后回到被更新的机器,首次设置的话,需要执行git clone,以后部署的时候,就单单git pull即可。下面的是条实例命令:
注意:苏南大叔在这里,并不建议您clone操作使用http的地址,应该使用git@类似的地址。下面的是命令行对比:
git clone http://gitlab/project/demo.gitgit clone git@gitlab:project/demo.git代码分发服务器的更新脚本
在代码分发服务器上,苏南大叔做了个.sh的更新脚本。以后更新的时候,就敲一下这个.sh命令的地址,就可以做到代码更新了。下面的脚本中,苏南大叔用到了一个rsync的命令,这里就做个预览吧。具体的更多详细内容,可以参见苏南大叔的后续文章。
cd /your_local_git_folder/
git pull
rsync -vzrltog --exclude-from=/data/shell/nocp/data-site /data/webhome/data-site1/ syncuser@192.168.1.9::data-site --password-file=/root/rsync.password
rsync -vzrltog --exclude-from=/root/nocp.txt /root/data-site/ /website/data-site/总结
本文的难点就在于获取和设置deploykey,做到免密拉取两个以上的项目代码,这可能是个小坑。本文就讲述这么多经验文章了。欢迎大家关注苏南大叔的博客。谢谢。
更多gitlab相关经验文章,请点击下面的链接查看。
ssh-keygen -t rsa -P ""
为什么是 ""
而不填 email
有什么特别的原因吗。
没啥特别的...