设计:
在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
对上诉的四个用户全部产生独有的公私钥。
<