1. 建立git用户html
useradd git git
passwd git github
2. 创建一个ssh的访问控制文件,这个文件默认不存在的,须要本身手动添加,路径为 /home/git/.ssh/authorized_keys (这个文件的权限644)shell
这个文件的路径是在ssh服务器配置中指定的(/etc/ssh/sshd_config), 这个受权文件保存的是须要访问git服务器的客户端ssh key值。经过命令ssh-keygen -t rsa 便可生成.ssh目录及文件id_rsa和id_rsa.pub,将客户端id_rsa.pub文件中的内容拷贝到authorized_keys文件中便可。centos
3. 在服务器上创建一个git库目录 如 /home/git/gitSrv , 在目录中初始化一个空库bash
git init --bare sample.git --bare代表只用版本记录文件,没有工做区,没有实际保存的可读源文件。(裸仓库)服务器
裸仓库没有工做区,由于服务器上的Git仓库纯粹是为了共享,因此不让用户直接登陆到服务器上去改工做区,而且服务器上的Git仓库一般都以.git结尾。而后将这个文件的归属设置为git用户(若是已是git用户的就再也不操做了)ssh
chown -R git:git sampl.git centos7
4. 将git用户的登陆默认shell改为git-shell,使用管理员权限编辑/etc/passwdspa
将git:x:1001:1001:,,,:/home/git:/bin/bash 改成:git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell (git-shell是安装git时产生的,须要指定对应git-shell的路径,用户能够正常经过ssh使用git,但没法登陆shell)
备注:
1. 生成ssh密钥: ssh-keygen -t rsa 建议使用默认的文件路径和无密码(直接两次回车)
2. 生成的密钥传到git服务器上,可使用scp命令
scp localFile remoteUserName@remoteIp:remoteDIrPath/remoteFileName 传递某个文件到远端
scp remoteUser@remoteIp:remotePath localPath 从远端下载某个文件到本地
scp localDir -r remoteUserName@remoteIp:remoteDIrPath 传递整个目录到远端
3. ssh服务重启命令:
centos7下 systemctl restart sshd.service
4. cat 向某个文件末尾追加信息而且主动换行。添加多个用户的rsa key值得时候可使用 cat a.txt >> b.txt 向b后添加a的内容
5. 当配置完后使用ssh没法链接服务器,检查/etc/ssh/sshd_config文件下的以下配置项
RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication yes
6. git status中文乱序解决: git config --global core.quotepath false
7. 若是团队过大,每一个人 的权限都要放到authorized_keys中就有点麻烦了,这个时候使用gitolite来管理每一个人的ssh公钥,
并能够指定一些列的访问权限。
https://github.com/sitaramc/gitolite
参考:
https://www.liaoxuefeng.com/wiki/896043488029600/899998870925664
http://www.javashuo.com/article/p-xpitgsvj-de.html