windows+CentOS+git服务器搭建记录

本文详细记录了如何在CentOS上搭建git服务器,并通过公钥私钥实现用户权限管理。介绍了创建用户、配置SSH、解决LF与CRLF问题,以及处理push和clone时的权限验证问题。通过用户分组和公钥认证,实现了不同用户的文件访问权限控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计:

在CentOS上创建一个管理共享文件夹的用户git。
创建需要登录的用户man1,man2.
用户在Windows客户端git上登录操作。
实现访问的权限分配:
这里写图片描述

一些必须知道的东西:

ssh的退出: exit
传输文件:
man2@edemon-PC MINGW64 ~/man2 (master)
$ scp info man2@192.168.137.99:/home/man2
man2@192.168.137.99’s password:
info

查看用户(500以上就是自己创建的用户):
cat /etc/passwd
比如:

$ sudo useradd -m jordan   #增加用户 参数m用于创建目录,不加参数不会产生用户文件夹
$ cat /etc/passwd
jordan:x:500:500::/home/jordan:/bin/bash

关于公钥和私钥:
以下资料来自 http://blog.youkuaiyun.com/tanyujing/article/details/17348321

公钥和私钥就是俗称的不对称加密方式,是从以前的对称加密(使用用户名与密码)方式的提高。用电子邮件的方式说明一下原理。
使用公钥与私钥的目的就是实现安全的电子邮件,必须实现如下目的:
1. 我发送给你的内容必须加密,在邮件的传输过程中不能被别人看到。
2. 必须保证是我发送的邮件,不是别人冒充我的。
要达到这样的目标必须发送邮件的两人都有公钥和私钥。
公钥,就是给大家用的,你可以通过电子邮件发布,可以通过网站让别人下载,公钥其实是用来加密/验章用的。私钥,就是自己的,必须非常小心保存,最好加上 密码,私钥是用来解密/签章,首先就Key的所有权来说,私钥只有个人拥有。公钥与私钥的作用是:用公钥加密的内容只能用私钥解密,用私钥加密的内容只能 用公钥解密。
比如说,我要给你发送一个加密的邮件。首先,我必须拥有你的公钥,你也必须拥有我的公钥。
首先,我用你的公钥给这个邮件加密,这样就保证这个邮件不被别人看到,而且保证这个邮件在传送过程中没有被修改。你收到邮件后,用你的私钥就可以解密,就能看到内容。
其次我用我的私钥给这个邮件加密,发送到你手里后,你可以用我的公钥解密。因为私钥只有我手里有,这样就保证了这个邮件是我发送的。
当A->B资料时,A会使用B的公钥加密,这样才能确保只有B能解开,否则普罗大众都能解开加密的讯息,就是去了资料的保密性。验证方面则是使用签 验章的机制,A传资料给大家时,会以自己的私钥做签章,如此所有收到讯息的人都可以用A的公钥进行验章,便可确认讯息是由 A 发出来的了。

主机和虚拟机实际上都是通过虚拟路由通信,虚拟路由通过宿主使得其他虚拟机也可以访问外网


操作过程中可能遇到的问题:

如果没有将自己的公钥交给git,那么使用git进行clone等操作将会出现验证问题:
问题 The authenticity of host ‘192.168.137.99 (192.168.137.99)’ can’t be established.:

man2@edemon-PC MINGW64 ~
$ git clone ssh://192.168.137.99/home/data/git/project.git
Cloning into 'project'...
The authenticity of host '192.168.137.99 (192.168.137.99)' can't be established.
RSA key fingerprint is SHA256:KAYYu0Pe+Ma195kuhsL8kAUxaBTuoLfsUjLQ2HpkfzE.
Are you sure you want to continue connecting (yes/no)? 

问题LF will be replaced by CRLF in man1_t 的解决:

$ git add man1_t
warning: LF will be replaced by CRLF in man1_t.
The file will have its original line endings in your working directory.

Administrator@edemon MINGW64 ~/git_test (master)
$ git config core.autocrlf false

问题 Failed to connect to proxy.com port 1234: Timed out:

Administrator@edemon MINGW64 ~/git_test (master)
$ git push origin master
fatal: unable to access 'https://192.168.137.128:/home/data/git/project.git/': Failed to connect to proxy.com port 1234: Timed out

将https协议改成ssh即可
或者在 /c/Users/Administrator/.gitconfig 编辑即可。

问题 Not a git repository (or any of the parent directories): .git:

Administrator@edemon MINGW64 ~/.ssh
$ git remote add origin ssh://192.168.137.128/home/data/git/project.git
fatal: Not a git repository (or any of the parent directories): .git
#解决: 进入自己的版本库(含有.git的文件夹)
Administrator@edemon MINGW64 ~/git_test (master)
$ ls -a
./  ../  .git/  git_test/  man1.txt  man1_administrator

Administrator@edemon MINGW64 ~/git_test (master)
$ pwd
/c/Users/Administrator/git_test

问题 fatal: remote origin already exists. :
解决方法:
$ git remote rm origin

问题 insufficient permission for adding an object to repository:

$ git push -u origin master
man1@192.168.137.99's password:
Counting objects: 3, done.
Writing objects: 100% (3/3), 210 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
error: insufficient permission for adding an object to repository database ./objects

fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To ssh://192.168.137.99/home/data/git/project.git
 ! [remote rejected] master -> master (n/a (unpacker error))
error: failed to push some refs to 'ssh://192.168.137.99/home/data/git/project.git'


用户加入管理员的组中即可。

问题 failed to push some refs to:

$ git push -u origin master
man2@192.168.137.99's password:
To ssh://192.168.137.99/home/data/git/project.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'ssh://192.168.137.99/home/data/git/project.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

按照提示,我们需要先将远程库pull。

man2@edemon-PC MINGW64 ~/man2 (master)
$ git pull ssh://192.168.137.99/home/data/git/project.git

过程:

$ Useradd  -m jordan
$ passwd jordan

对上诉的四个用户全部产生独有的公私钥。

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值