使用私有git倉庫備份服務器腳本和配置文件

1. 建立私有git倉庫

服務器端配置:
    # 安裝 git
    yum -y install git

    # 建立 git 用戶
    useradd git
    
    # 建立私有倉庫數據存儲目錄
    mkdir /git_back/

    # 修改權限
    chown git:git /git_back/

    # 生成私有倉庫 key
    su - git
    ssh-keygen
    cd .ssh
    cp id_rsa.pub authorized_keys

    # 初始化私有倉庫
    cd /git_back/
    git init --bare gitserver

    # 修改 git 用戶的登陸 shell, 禁止其登陸系統
    su - root
    usermod -s $(which git-shell) git

  

2. 配置客戶端環境

[root@localhost]# cat init_back.sh 

#!/bin/bash
#描述: 初始化 git 客戶端, 用於備份服務器上的腳本和配置文件到私有 git 倉庫
#建議: 備份的文件總大小最好在 100M 如下


export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# 客戶端鏈接私有 git 倉庫的用戶
back_user='root'
# 客戶端的備份目錄
back_dir='/opt/git_back'
# 服務端 git 用戶的私鑰名稱
key_name='id_dsa'



# 私有 git 倉庫的地址
git_server='192.168.0.104'
# 私有 git 倉庫的用戶
git_server_user='git'
# 私有 git 倉庫所在目錄
git_server_dir='/git_back'
# 私有 git 倉庫名
git_server_repertory='gitserver'
# 每個主機建立一個目錄(之內網 IP 命名), 當本臺主機的全部備份放入該目錄中
# 設置內網 IP 段
client_ip='192.168.0'



# git 基礎配置
git_user_email='you@example.com'
git_user_name='Your Name'

if [ ! -f "${key_name}" ];then 
    echo "請將服務器端 key 放入當前目錄" 
    exit 10
fi

which git &> /dev/null || yum -y install git &> /dev/null
which ifconfig &> /dev/null || yum -y install net-tools &> /dev/null

which git &> /dev/null
if [ ${?} -ne 0 ];then
    echo "沒法安裝 git 命令"
    exit 10
fi

which git &> /dev/null
if [ ${?} -ne 0 ];then
    echo "沒法安裝 ifconfig 命令"
    exit 10
fi


if [ ${back_user} == 'root' ];then
    [ -d '/root/.ssh/' ] || mkdir /root/.ssh/
    if [ ! -f "/root/.ssh/${key_name}" ];then 
        cp ${key_name} /root/.ssh/
        chmod 600 /root/.ssh/${key_name}
    else
        echo "key 已存在, 請手動更改key的名稱和/etc/ssh/ssh_config"
        exit 1
    fi
else
    ssh_dir="/home/${back_user}/.ssh"
    [ -d ${ssh_dir} ] || mkdir ${ssh_dir}
    if [ ! -f "${ssh_dir}/${key_name}" ];then
        cp ${key_name} ${ssh_dir}
        chmod 600 ${ssh_dir}/${key_name}
    else
        echo "key 已存在, 請手動更改key的名稱和/etc/ssh/ssh_config"
        exit 2
    fi 
fi 

if [ -d ${back_dir} ];then
    echo "備份目錄已存在"
    exit 3
else
    mkdir ${back_dir}
fi

cd ${back_dir}
# 第一次鏈接, 自動將主機加入到 known_hosts, git 用戶禁止登陸系統
ssh git@192.168.0.104 -o StrictHostKeyChecking=no ifconfig &> /dev/null
git clone ${git_server_user}@${git_server}:${git_server_dir}/${git_server_repertory}

intranet_ip=$(ifconfig | grep "${client_ip}" | awk '{print $2}' | grep -o "${client_ip}.*")
cd ${back_dir}/${git_server_repertory}
if [ ! -d ${intranet_ip} ];then
    mkdir ${intranet_ip}
else
    echo "${intranet_ip} 目錄已存在"
    exit 5
fi

git config --global user.email ${git_user_email}
git config --global user.name ${git_user_name}
git config --global push.default simple
git push --set-upstream origin master

 

3. 提交修改後的文件

#!/bin/bash
#描述: 天天提交一次修改過的文件


back_dir='/opt/git_back/gitserver/'
cd ${back_dir}
git pull &> /dev/null
git add -A &> /dev/null
git commit -m "$(date +%Y-%m-%d)" &> /dev/null && git push &> /dev/null
相關文章
相關標籤/搜索