本文共 5809 字,大约阅读时间需要 19 分钟。
使用SSH搭建Git服务器,需要做以下准备工作:
·在服务器和客户端机器上分别安装Git
·在服务器和客户端机器上安装SSH服务
Mac OS和Linux一般都自带SSH客户端,Windows安装Git的时候选择安装Git-Bash也可以使用SSH,也可以另外选择Putty和SecureCRT之类的工具链接SSH服务器。
Linux 安装git、openssh-server
服务器环境使用Ubuntu服务器(搭建Git服务器)
/************************* 以下为服务器端操作 ************************* /
1、$ cat /etc/issue(查询服务器版本)
Ubuntu 14.04.5 LTS \n \l
2、创建git仓库位置
dicksoy@ubuntu:~$ pwd(显示当前目录)
/home/dicksoy
dicksoy@ubuntu:~$ mkdir repos(创建repos文件夹)
dicksoy@ubuntu:~$ sudo addgroup git-rw(新建用户组git-rw)
dicksoy@ubuntu:~$ sudo chgrp -R git-rw repos(改变repos文件夹所属的用户组)
·-c或 --changes:效果类似“-v”参数,但仅回报更改的部分;
·-f或 --quiet或——silent:不显示错误信息;
·-h或 --no-dereference:只对符号连接的文件作修改,而不是该其他任何相关文件;
·-R或 --recursive:递归处理,将指令目录下的所有文件及子目录一并处理;
·-v或 --verbose:显示指令执行过程;
·--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
drwxrwxr-x 2 dicksoy git-rw 4096 6Ղ 16 13:28 repos
3、创建git用户(创建用户 - 参与项目的人)
dicksoy@ubuntu:~$ sudo useradd -M -g git-rw gitteacher(创建gitteacher用户)
·-c<备注>:加上备注文字。备注文字会保存在passwd的备注栏位中;
·-d<登入目录>:指定用户登入时的启始目录;
·-D:变更预设值;
·-e<有效期限>:指定帐号的有效期限;
·-f<缓冲天数>:指定在密码过期后多少天即关闭该帐号;
·-g<群组>:指定用户所属的群组;
·-G<群组>:指定用户所属的附加群组;
·-m:自动建立用户的登入目录;
·-M:不要自动建立用户的登入目录;
·-n:取消建立以用户名称为名的群组;
·-r:建立系统帐号;
·-s:指定用户登入后所使用的shell;
·-u:指定用户id。
dicksoy@ubuntu:~$ sudo passwd gitteacher(为gitteacher用户设置密码)
4、修改dicksoy.git目录权限
dicksoy@ubuntu:~/repos$ sudo chmod -R g+w /home/dicksoy/repos/dicksoy.git
dicksoy@ubuntu:~/repos$ ls -l /home/dicksoy/repos/dicksoy.git/
drwxrwxr-x 6 gitteacher git-rw 4096 6Ղ 16 13:49 dicksoy.git
/************************* 以下为客户端A操作 ************************* /
$ mkdir dicksoy_git(创建git仓库)
$ cd dicksoy_git(进入dicksoy_git文件夹)
$ git init(初始化仓库)
$ touch README.md
$ git add -A(添加所有到暂存区)
$ git commit -m “desc”(提交并且添加注释desc)
$ git clone --bare dicksoy_git dicksoy_git.git(从现有仓库克隆)
$ scp -r dicksoy_git.git 复制文件到指定服务器的指定目录下,gitteacher为用户名)
·-r 若source中含有目录名,则将目录下之档案亦皆依序拷贝至目的地。
scp命令:可以在2个linux主机间复制文件
/************************* 以下为服务器端操作 ************************* /
192.168.3.230:/home/dicksoy/repos
dicksoy_git.git 已经在/home/dicksoy/repos目录下
/************************* 以下为客户端B操作 ************************* /
[root@localhost git]# mkdir repo
[root@localhost git]# cd repo/
[root@localhost repo]# git clone gitstudent@192.168.3.230:/home/dicksoy/repos/dicksoy_git.git(使用gitstudent用户克隆该git,创建用户在上面有详细操作)
[root@localhost git_teacher]# vim README.md(再次修改文件)
[root@localhost git_teacher]# git add README.md(添加到暂存区)
[root@localhost git_teacher]# git commit -m "studentCommit"(提交)
[root@localhost git_teacher]# git push origin master(推送)
错误:remote: fatal: failed to write object(没有写权限,需要设置服务器文件夹权限)
/************************* 方式2 ************************* /
可以直接在服务器端进行仓库创建操作
dicksoy@ubuntu:~/repos$ git init --bare --shared git_server.git
初始化空的 共享 Git 仓库于 /home/dicksoy/repos/git_server.git/
dicksoy@ubuntu:~/repos$ ls -l git_server.git/(查询新建的git仓库,需要修改所属用户组)
总用量 32
drwxrwsr-x 2 dicksoy dicksoy 4096 6Ղ 16 15:02 branches
-rw-rw-r-- 1 dicksoy dicksoy 126 6Ղ 16 15:02 config
-rw-rw-r-- 1 dicksoy dicksoy 73 6Ղ 16 15:02 description
-rw-rw-r-- 1 dicksoy dicksoy 23 6Ղ 16 15:02 HEAD
drwxrwsr-x 2 dicksoy dicksoy 4096 6Ղ 16 15:02 hooks
drwxrwsr-x 2 dicksoy dicksoy 4096 6Ղ 16 15:02 info
drwxrwsr-x 4 dicksoy dicksoy 4096 6Ղ 16 15:02 objects
drwxrwsr-x 4 dicksoy dicksoy 4096 6Ղ 16 15:02 refs
dicksoy@ubuntu:~/repos$ ls -l git_teacher.git/(查询之前的git仓库)
总用量 32
-rw-rw-r-- 1 gitteacher git-rw 175 6Ղ 16 13:49 config
-rw-rw-r-- 1 gitteacher git-rw 73 6Ղ 16 13:49 description
-rw-rw-r-- 1 gitteacher git-rw 23 6Ղ 16 13:49 HEAD
drwxrwxr-x 2 gitteacher git-rw 4096 6Ղ 16 13:49 hooks
drwxrwxr-x 2 gitteacher git-rw 4096 6Ղ 16 13:49 info
drwxrwxr-x 10 gitteacher git-rw 4096 6Ղ 16 13:57 objects
-rw-rw-r-- 1 gitteacher git-rw 85 6Ղ 16 13:49 packed-refs
drwxrwxr-x 4 gitteacher git-rw 4096 6Ղ 16 13:49 refs
·使用SSH公钥管理Git仓库授权
dicksoy@ubuntu:~/repos$ sudo deluser gitteacher(删除gitteacher用户)
dicksoy@ubuntu:~/repos$ sudo deluser gitstudent(删除gitstudent用户)
dicksoy@ubuntu:~/repos$ sudo delgroup git-rw(删除git-rw用户组)
dicksoy@ubuntu:~$ sudo rm -rf repos/(删除git仓库)
只建立一个用户,让所有用户通过这一个账户对git仓库进行读写
dicksoy@ubuntu:~$ sudo adduser git(新建git仓库)
dicksoy@ubuntu:~$ su git(切换为git用户)
git@ubuntu:~$ mkdir .ssh && chmod 700 .ssh(新建.ssh目录,并且只有git用户可读写)
git@ubuntu:~$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
/************************* 以下为客户端操作 ************************* /
[root@localhost ~]# cd .ssh/
[root@localhost .ssh]# ls
id_rsa(私钥) id_rsa.pub(公钥) known_hosts
备份操作
[root@localhost .ssh]# mv id_rsa id_rsa_bak
[root@localhost .ssh]# mv id_rsa.pub id_rsa.pub_bak
[root@localhost .ssh]# ls
id_rsa_bak id_rsa.pub_bak known_hosts
[root@localhost .ssh]# ssh-keygen(重新生成公钥和私钥)
[root@localhost .ssh]# cat id_rsa.pub | ssh git@192.168.3.230 'cat ->> ~/.ssh/authorized_keys'(读取公钥的内容,并且写入到git@192.168.3.230服务器的~/.ssh/authorized_keys文件中)
[root@localhost .ssh]# ssh git@192.168.3.230(此时通过git连接192.168.3.230服务器不需要密码)
公钥可以通过邮件发送给管理员,进行写入
/************************* 以下为服务器端操作 ************************* /
git@ubuntu:~$ mkdir repos
git@ubuntu:~$ cd repos/
git@ubuntu:~/repos$ git init --bare server.git
初始化空的 Git 仓库于 /home/git/repos/server.git/
/************************* 以下为客户端操作 ************************* /
[root@localhost repo]# git clone git@192.168.3.230:/home/git/repos/server.git(不需要密码)
[root@localhost server]# git add README.md
[root@localhost server]# git commit -m "testCommit"
[root@localhost server]# git push origin master
此时提交成功且不需要密码(所有团队成员经过authorized_keys认证之后就可以对服务器的git仓库进行协作)
dicksoy@ubuntu:/home/git/repos$ which git-shell
/usr/bin/git-shell
dicksoy@ubuntu:/home/git/repos$ sudo vim /etc/shells(把git-shell添加到系统shell中)
/git/repos$ sudo chsh git(更改git用户使用的shell)
Changing the login shell for git
Enter the new value, or press ENTER for the default
Login Shell [/bin/bash]: /usr/bin/git-shell
fatal: Interactive git shell is not enabled.(不能进行这样的git操作)
转载地址:https://www.cnblogs.com/codingbaby/p/7055603.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!