1.安装git :
$sudo apt-get install git
2.创建一个git用户,用来运行git服务
$sudo adduser git
3.使用命令$sudo su git切换到git用户,进入git用户的主目录/home/git,则这个目录下创建.ssh文件,在这个目录中创建文件authorized_keys文件,用来保存需要登录的用户的公钥。
目录的文件结构为:/home/git/.ssh/authorized_keys
(注:此时要注意authorized_keys的所属的用户和组,使用ll命令查看,如果不是属于上例所创用户git,可使用chown更改,运行命令:#chown -R git:git authorized_keys)
4.初始化Git仓库:
先选定一个目录作为Git仓库,我的选择是在/home/git/创建目录srv(目录结构为/home/git/srv),然后在srv目录中输入命令:
$sudo git init --bare sample.git
注:在这个过程中,可能遇到问题"git is not in the sudoers file. This incident will be reported."其中git是你的用户名,也就是你的新建的用户名没有权限使用sudo,我们只要需改一下/etc/sudoers文件即可。
首先要切换到root用户,使用命令$sudo su - (提示:注意su后面的 -),此时的效果是如root超级用户登录一样。
切换到root超级用户后,此时请输入命令:$chmod u+w /etc/sudoers (给这个文件添加写权限)
再次,使用vim命令打开/etc/sudoers文件,然后在内容中添加语句:git ALL=(ALL) ALL
效果如图(git是新添加的用户名):
编辑后退出,然后使用命令将文件的写权限去除:
$chmod u-w /etc/sudoers
5.Git就会创建一个裸仓库,该仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去更改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:
$sudo chown -R git:git sample.git
6.克隆远程库:
在实体主机(去别虚拟机)的桌面上运行git客户端,运行命令:
$git clone git@ip地址:sample的绝对地址
例如:
初次运行时,可能出现如下的选择,输入yes即可。
此时,c:Users用户名.ssh下会多出一个文件known_hosts,以后在这台电脑上再次连接目标Git服务器时不会再提示上面的语句。
7.客户端创建SSH公钥和密钥
运行命令:$ssh-keygen -t rsa -C "邮件地址"
在目录:~/.ssh(即C:Users用户名.ssh)中可以看到生成的两个文件:id_rsa 和 id_rsa.pub
其中id_rsa是私钥,id_rsa.pub是公钥
8.在服务器端Git打开RSA认证
进入/etc/ssh目录中,编辑sshd_config,打开以下三个配置的注释:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
例如:
改为:
然后再重新启动sshd服务:
# /etc/init.d/ssh restart
返回数据:
9. 将客户端公钥导入到服务器端/home/git/.ssh/authorized_keys文件
登录到git bash,导入keys文件:
$ssh git@IP地址 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
如图:
此时可查看在服务器上的authorized_keys中是否出现了id_rsa.pub中的内容。
重要:
修改.ssh的目录权限为700
修改.ssh/authorized_keys文件的权限为600
运行命令:
#chmod 700 .ssh
#chmod 600 .ssh/authorized_keys
运行结果如下:
10. 客户端此时可使用git clone克隆远程仓库。
11.禁止git用户ssh登录服务器
之前在服务器端创建的git用户不允许ssh登录服务器
编辑/etc/passwd
找到:
git:x:1001:1001:,,,:/home/git:/bin/bash
修改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
此时git用户可以正常通过ssh使用git,但无法通过ssh登录系统。
12.配置完成后,在windows客户端使用git bash工具一系列命令即可实现类github的上传和下载:
$git config --global user.email "邮件地址"
$git config --global user.name "用户名(如此文中的git用户)"
$git remote add origin git@IP地址:远程库的绝对地址(/home/git/srv/sample.git)
$git add .
$git push -u origin master (注:若出现问题可以先pull一下:$git pull origin master)
13.注意:
当使用git status命令时,若出现下面的提示:
即执行git rm命令即可。
例如上例中的那样:(test1.txt为新添加的文件)
#git rm --cached test1.txt