服務器端配置: # 安裝 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
[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
#!/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