linux服务器搭建git并配置秘钥及服务器端自动更新

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]-----+

如下图所示:

1234567.png

(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]-----+

345678.png

(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]-----+

567890.png

这里大概说一下,秘钥这个玩意,说白了就是登陆令牌,每台电脑都是不一样的,每台电脑的每个用户都是不一样的,就比如说,我上边的服务器中的git用户及root用户,他俩的秘钥就是不一样的。

5:为git用户配置公钥

说的明白点,就是我给git用户配置了那台电脑的那个用户的公钥,我就可以没有密码的更新和提交代码。当然,对应的电脑上边应该有私钥(放哪都可以,一般windows默认C:Users用户 .ssh,linux默认/home/用户/.ssh)

我们的公钥配置在,git用户家目录下的.ssh目录下的authorized_keys文件中,一行一个。

文件位置如下图所示:

111111111111.png

注意: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的时候触发执行脚本。

脚本存放位置,如下图红框标注所示:

22222222.png

注意脚本文件的权限及所有者。否则可能因为权限的问题无法执行。

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

以上配置完成,大概就可以正常的提交以及更新代码了。当然,输不输密码要看你的配置,以及你自身的需求。毕竟,这个玩意,还是安全一点好。

有好的建议,请在下方输入你的评论。

欢迎访问个人博客
https://guanchao.site

欢迎访问小程序:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值