Git玩了好久了,但是一直都不怎么正经。
只是我自己用,所以就没有考虑多人使用权限的问题。
自己一个人在本地开发,测试完成之后,在传到git仓库中,然后在通过git更新到服务器的网站目录中,当然,这一路都是需要输入git密码的。
但是git这个密码呀,安全是安全,就是太麻烦了。有的时候着急,就直接从服务器上拽文件下来改。等有时间在提交git仓库。
这里大概重新梳理一下,linux服务器在搭建及配置git秘钥以及自动更新的全过程。
首先,git不同于svn,通常不需要建像svn那摩多的用户,基本上,大家共同使用一个用户,在各自的电脑上配置好公钥及私钥就可以了。
当然,如果你有需求需要多个用户协同管理git仓库,请移步《git多人协作用户权限配置》
1:添加git用户
这里要使用命令adduser,而不是useradd。
关于useradd与adduser的区别,请移步《useradd与adduser命令的区别》
Adduser git
root@iZuf60ynur81p6k0ysvtneZ:/# adduser fff Adding user `fff' ... Adding new group `fff' (1003) ... Adding new user `fff' (1002) with group `fff' ... Creating home directory `/home/fff' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for fff Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y
2:安装git
安装git的命令,取决你在什么服务器。
Centos
Yum install git
Ubuntu
Apt-get install git
3:创建git仓库
(1):创建仓库命令
Git init –bare
(2):将git仓库的所有者修改成git用户
Chown -R fff:fff /git/test
3:修改sshd配置文件
(1):查看sshd状态(是否正在运行)
Systemctl status sshd
(2):编辑sshd配置文件
Vim /etc/ssh/sshd_config
增加如下内容:
# 是否允许用户自行使用成对的密钥系统进行登入行为,仅针对 version 2 RSAAuthentication yes PubkeyAuthentication yes # 自制的公钥数据放置于用户home目录下的 .ssh/authorized_keys 内 AuthorizedKeysFile .ssh/authorized_keys # 是否禁用使用密码登录 PasswordAuthentication yes # 是否允许root用户 PermitRootLogin yes
(3):重启sshd
Systemctl restart sshd
4: 生成秘钥(执行命令一路回车)
(1):切换至fff用户(第一步中新添加的git用户),生成git用户在当前服务器上的ssh公钥及私钥
root@iZuf60ynur81p6k0ysvtneZ:/# su fff fff@iZuf60ynur81p6k0ysvtneZ:/$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/fff/.ssh/id_rsa): Created directory '/home/fff/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/fff/.ssh/id_rsa. Your public key has been saved in /home/fff/.ssh/id_rsa.pub. The key fingerprint is: SHA256:u3YOiRa1hs8Od2JKNfv7Fi76mShfBtMIXvLFsneTDlk fff@iZuf60ynur81p6k0ysvtneZ The key's randomart image is: +---[RSA 2048]----+ | | | . | | o + o E | | . B B o . | | + S = + | | B O +.. | | = @ +... | | o.*.Xooo | | .+*=B=. | +----[SHA256]-----+
如下图所示:
(2):切换至root用户,生成root用户在当前服务器中的ssh的公钥以及私钥。
fff@iZuf60ynur81p6k0ysvtneZ:/$ su root Password: root@iZuf60ynur81p6k0ysvtneZ:/# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_rsa already exists. Overwrite (y/n)? y Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:4Ll1RePXqtnz/2qox3cZvedCA1TuWb2nu3fULy5KPc8 root@iZuf60ynur81p6k0ysvtneZ The key's randomart image is: +---[RSA 2048]----+ | o.. | | o.o ..| | . .o o +| | . o ..o +.| | o S . .+.+| | o . . +oo=| | . ..=o+o=| | . =+=**| | o+ =EOX| +----[SHA256]-----+
(3):windows系统生成秘钥
命令格式:
ssh-keygen -t rsa -C '你的邮箱名'
打开cmd,输入以下命令:
C:Userscamellia>ssh-keygen -t rsa -C '123456@qq.com' Generating public/private rsa key pair. Enter file in which to save the key (C:Userscamellia/.ssh/id_rsa): C:Userscamellia/.ssh/id_rsa already exists. Overwrite (y/n)? y Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in C:Userscamellia/.ssh/id_rsa. Your public key has been saved in C:Userscamellia/.ssh/id_rsa.pub. The key fingerprint is: SHA256:idjtfZ1svkxtBFJfayalsG7B5P80vLgNFepawLEvLpI '123456@qq.com' The key's randomart image is: +---[RSA 2048]----+ | o ...| | + o.o.o| | *.o.=.| | o o .o =.*..| | . o S * o =.| | . .. +o=+o| | o ...**oo| | E ...+=+. | | . .o .+o | +----[SHA256]-----+
这里大概说一下,秘钥这个玩意,说白了就是登陆令牌,每台电脑都是不一样的,每台电脑的每个用户都是不一样的,就比如说,我上边的服务器中的git用户及root用户,他俩的秘钥就是不一样的。
5:为git用户配置公钥
说的明白点,就是我给git用户配置了那台电脑的那个用户的公钥,我就可以没有密码的更新和提交代码。当然,对应的电脑上边应该有私钥(放哪都可以,一般windows默认C:Users用户 .ssh,linux默认/home/用户/.ssh)
我们的公钥配置在,git用户家目录下的.ssh目录下的authorized_keys文件中,一行一个。
文件位置如下图所示:
注意:authorized_keys 文件权限必须是0655
然后我们将刚刚第四步骤中生成的三个公钥,都填写到authorized_keys文件中。一个公钥一行,一共三行。
6:将git仓库克隆到服务器的web根目录
命令格式:
Git clone 你的git用户@你的服务器Ip:/git/test
例:
Git clone fff@47.100.219.44:/git/test
这个时候,你是不需要输入密码的,如果你的公钥已经配置完成
7:很重要的一步,将上一步中克隆的目录的所有者改成git用户:
命令格式:
chown -R 用户名:用户组 目录
例:
chown -R fff:fff /var/www/test
8:配置git服务器端自动更新
这个需要在git仓库目录下的hooks目录中添加一个脚本文件。每当git commit的时候触发执行脚本。
脚本存放位置,如下图红框标注所示:
注意脚本文件的权限及所有者。否则可能因为权限的问题无法执行。
Post-update脚本文件内容:
#!/bin/sh # 你的代码在服务器中的目录 DEPLOY_PATH=/var/www/test/ echo commit on `date +"%Y-%m-%d %H:%M:%S"` >> commit.log unset GIT_DIR cd $DEPLOY_PATH git pull echo "commit success" exec git update-server-info
以上配置完成,大概就可以正常的提交以及更新代码了。当然,输不输密码要看你的配置,以及你自身的需求。毕竟,这个玩意,还是安全一点好。