Linux上建立GIT服务器

建立GIT私有服务器

取得客户端公钥

在客户端上生成SSH key

1
>> ssh-keygen -t rsa -C "your_email@example.com"

把公钥复制到粘贴板

1
2
>> clip < ~/.ssh/id_rsa.pub   ; Windows 上
>> echo ~/.ssh/id_rsa.pub     ; Linux 上

或者把公钥上传到Git服务器的/tmp目录下

1
>> scp .ssh/id_rsa.pub user@<host>:/tmp

配置服务器

(1) 配置用户, 一般意义上而言, git用户是默认创建的, 如果没有就按照如下创建, 并给git用户指定密码, 以方便进入git用户配置

1
2
>> sudo adduser -d /home/git -G httpd,users -m git
>> passwd git

(2) 配置用户默认目录

1
2
3
4
>> sudo usermod -d /home/git git
>> sudo mkdir -p /home/git
>> sudo chown -R git:users /home/git
>> sudo chmod -R 700 /home/git

(3) 切换到git用户, 配置公钥

1
2
3
>> su git
>> mkdir .ssh
>> cat /tmp/id_rsa.pub >> .ssh/authorized_keys

创建库

(1) 创建库文件夹

1
2
>> mkdir -p INC/sns
>> chown -R git:users INC

(2) git 初始化

1
2
>> cd INC/sns
>> git --bare init

客户端配置

建立本地库

1
2
3
4
5
6
7
8
>> mkdir p && cd p
>> git init
>> touch README
>> git add .                                        ; 加入提交等待列表
>> git cimmit -m "Init the project"                 ; 本地提交数据
>> git remote add origin git@<host>:INC/sns         ; 增加远程分支
>> git push origin master                           ; 推送数据
>> git brach --set-upstream-to=origin/master master ; 跟踪分支

问题

(1) 在推送的过程中出现如下问题

1
Permissions 0644 for ‘/root/.ssh/id_rsa’ are too open

需要把 .ssh/id_rsa 的权限降到 0600

1
>> chmod 600 ~/.ssh/id_rsa

(2) 在CyWin中, 无论怎么使用上一条命令都无法修改.ssh/id_rsa的权限到0600,其原因是CyWin中的文件属性中没有group属性, 全为None, 因此做如下修改

1
>> chown -R ming:users ~/.ssh/

(3) 无论怎么配置都只能使用密码登录, 会出现 Permission denied (publickey..) 的错误, 其原因是权限问题, 按如下权限修改

服务器上

1
2
3
/home/git                       0700
/home/git/.ssh                  0755
/home/git/.ssh/authorized_keys  0600

本机上

1
/home/users/.ssh/id_rsa.pub     0600

(*) 如果已经配置了git用户, 则需要配置默认shell, 以防止git用户登陆计算机

1
>> sudo usermod -s /usr/bin/git-shell git

(**) 如果希望增加 http 或者 https 协议的 Git 服务器, 参考Apache上搭建git服务器

参考

[1] 密钥不识别, 无法登陆

[2] CygWin上无法修改权限

[3] 安装指导

[4] 公钥无法登陆

Comments