搭建远程 Git 私库
安装 git
1 2 3
| git --version // 如无,则安装 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel yum install -y git
|
创建用户并配置仓库
1 2 3 4 5 6 7 8 9
| useradd git passwd git // 设置密码 su git // 这步很重要,不切换用户后面会很麻烦 cd /home/git/ mkdir -p projects/blog // 项目存在的真实目录 mkdir repos && cd repos git init --bare blog.git // 创建一个裸露的仓库 cd blog.git/hooks vim post-receive // 创建 hook 钩子函数,输入了内容如下
|
创建 hook 钩子函数,输入了内容如下
1 2
| #!/bin/sh git --work-tree=/home/git/projects/blog --git-dir=/home/git/repos/blog.git checkout -f
|
修改权限
1 2 3
| chmod +x post-receive exit // 退出到 root 登录 chown -R git:git /home/git/repos/blog.git // 添加权限
|
本地电脑建立ssh
信任
1 2 3 4 5
| ssh-keygen -t rsa
ssh-copy-id -i C:/Users/yourname/.ssh/id_rsa.pub git@server_ip ssh git@server_ip // 测试能否登录
|
注:报错'ssh-copy-id' 不是内部或外部命令,也不是可运行的程序
时。
- 打开 powershell,再执行 ssh-copy-id 命令
1 2 3
| ssh-copy-id git@server_ip
ssh-copy-id -i C:/Users/yourname/.ssh/id_rsa.pub git@server_ip
|
- 如果报错
ssh-copy-id : 无法将“ssh-copy-id”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
,则执行以下代码。
1 2 3 4 5 6 7 8 9
| function ssh-copy-id([string]$userAtMachine, $args){ $publicKey = "$ENV:USERPROFILE" + "/.ssh/id_rsa.pub" if (!(Test-Path "$publicKey")){ Write-Error "ERROR: failed to open ID file '$publicKey': No such file" } else { & cat "$publicKey" | ssh $args $userAtMachine "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1" } }
|
- 再执行 ssh-copy-id 命令
为了安全起见禁用 git 用户的 shell 登录权限,从而只能用 git clone,git push 等登录
1 2 3 4
| cat /etc/shells which git-shell vi /etc/shells
|
修改/etc/passwd 中的权限
1 2 3 4 5 6 7
| vim /etc/passwd
git:x:1000:1000::/home/git:/bin/bash
git:x:1000:1000:,,,:/home/git:/usr/bin/git-shell
|