最近配置了多次git服务器,最后感觉还是下面的文章描写的最清楚,感谢原作者的分线。
但是,今天在配置后提交的时候发现了新的问题在下面的文章没有提到,在这里补充完整并分享给大家少走弯路:
PS D:\GitHub\kdy\OTS\OTS4WordAddIn> git pull
The authenticity of host '123.222.22.20 (123.222.22.20)' can't be established.
ED25519 key fingerprint is SHA256:0sT+tGJGH8NseYvLic+BczlINCO2PY1Jcky2yDUbdgw.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '123.222.22.20' (ED25519) to the list of known hosts.
Already up to date.
PS D:\GitHub\kdy\OTS\OTS4WordAddIn> ssh-keyscan -t ed25519 123.222.22.20 >> ~/.ssh/known_hosts
# 123.222.22.20:22 SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.4
解释说明:
当您在提交代码时出现以上提示时,这意味着您连接的主机的身份验证无法确认。这通常是因为您首次连接到该主机,或者主机的公钥发生了变化。
要处理这个问题,您可以选择接受主机的身份验证。根据您使用的版本控制系统,可以采取以下步骤:
如果您使用的是Git命令行,请运行以下命令接受主机的身份验证:
ssh-keyscan -t ed25519 123.222.22.20 >> ~/.ssh/known_hosts
如果您使用的是Git图形界面工具,请查找相关选项以接受主机的身份验证。通常情况下,会有一个类似于"Accept"或"Trust"的按钮。
请注意,接受主机的身份验证意味着您信任该主机,并且将其公钥保存在已知主机列表中,以便将来的连接。确保您确实信任该主机,以避免安全风险。
原文链接以及原文如下:
手把手教你在 Ubuntu 上搭建 Git 服务器-腾讯云开发者社区-腾讯云
阅读本文大概需要 5 分钟。
最近在写一些脚本,为了保持连续性,就在家也抽空赶进度,所以碰到了代码同步的问题,当时想到的方法有三个:
使用云盘,这个拿来即用,但是因为云盘还存放了其他一些东西,总是实时同步不太妥当; 使用 SVN,传统的代码托管工具,一直在用; 使用 Git,最新的分布式代码托管工具,据说很强大。
最后决定使用 Git,主要是学习下最新的技术。下面是操作步骤,做记录的同时也给其他同学做个指引:
先说下环境:
服务端: Ubuntu 16.04 x64 客户端: Windows7 x64
服务端配置
先使用如下命令切到 root 权限进行操作:
sudo bash
复制
提示输入密码时,输入 root 密码即可。
登录成功后,开始安装 git,命令:
apt-get install git
复制
提示是否继续时,输入 y 后回车,安装流程继续,并直至安装完成。
接着开始安装 ssh,命令:
apt-get install openssh-server openssh-client
复制
同样在询问是否继续时,输入 y 后回车,安装会自动完成。
然后我们新建一个 git 专属用户,用户名也叫 git,命令:
adduser git
复制
新建成功后会提示设置用户密码,请设置一个自己能记住的密码后继续,后续的详细信息可以酌情填写。
下面开始新建 git 仓库,我们选定仓库存放目录为 /srv 下面,仓库名 myfiles.git,所以命令:
git init --bare /srv/myfiles.git
复制
因为当前用户是 root,为了让后面 git 专用账户能够操作仓库目录,我们需要把仓库目录授权给 git,命令:
chown -R git:git /srv/myfiles.git/
复制
客户端操作
首先需要下载 Windows 版本的 git,下载地址:https://git-scm.com/download/win
下载完成后点击安装,并根据提示点击「下一步」,直到安装完成。
在客户端创建一个工作目录,比如我的是 gitdir,在工作目录内右键并点击 「Git Bash Here」。
在弹出的命令后窗口 clone 仓库到本地:
$ git clone git@192.168.252.128:/srv/myfiles.git
Cloning into 'myfiles'...
The authenticity of host '192.168.252.128 (192.168.252.128)' can't be established.
ECDSA key fingerprint is SHA256:zqtjAg+FGfWrT3SCp1Qa2KqhE2UOy3PmudhhrTFlm7A.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.252.128' (ECDSA) to the list of known hosts.
git@192.168.252.128's password:
warning: You appear to have cloned an empty repository.
复制
注意请把「192.168.252.128」换成自己的服务端 ip,并且在确认时输入的是「yes」,最后输入的是创建 git 用户时候的密码。
为了客户端进行后续的提交操作,我们还需要注明当前机器的用户信息,命令后如下:
git config --global user.email "you@example.com"git config --global user.name "Your Name"
复制
注册后,commit 的时候会使用这个注册信息来记录操作人信息,然后在使用 git log
时可以看到对应的信息,效果如下图:
$ git log
commit ae72bcc89ea8f5d9d3a44f0e00cf35e91a1afce8 (HEAD -> master, origin/master)
Author: sylan215 <sylan215@sylan215.com>
Date: Wed Oct 18 18:37:41 2017 +0800 测试提交
复制
至此,我们完成整个配置过程。
文件修改并同步到 Git 服务器
配置完成后,我们就进入实际使用环节了。
首先我们先修改几个文件,并拷贝到 myfiles 目录下,然后提交到服务端,在 myfiles 下运行提交命令:
git add .
git commit -am "测试提交"git push
复制
带输出的命令行内容:
$ git add .
$ git commit -am "测试提交"[master (root-commit) ae72bcc] 测试提交 1 file changed, 1 insertion(+)
create mode 100644 test.txt
$ git push
git@192.168.252.128's password:
Counting objects: 3, done.
Writing objects: 100% (3/3), 223 bytes | 223.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To 192.168.252.128:/srv/myfiles.git
* [new branch] master -> master
复制
提示输入密码的地方,还是输入的 git 账户的密码。
说明:关于 git 操作的详细命令,请参考:http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
提交成功后,我们在另一台机器上使用命令 git pull
同步最新内容:
$ git pull
git@192.168.252.128's password:
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From 192.168.252.128:/srv/myfiles
ae72bcc..afad897 master -> origin/master
Updating ae72bcc..afad897
Fast-forward
test.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
复制
对于多用户的复杂操作,请参考:http://www.ruanyifeng.com/blog/2014/06/git_remote.html
其它配置
禁用 git 账户的 shell
为了安全考虑,如果需要禁用 git 账户的 shell,可以修改 /etc/passwd 文件:
把其中的
git:x:1001:1001:git-user,,,:/home/git:/bin/bash
复制
修改为
git:x:1001:1001:git-user,,,:/home/git:/usr/bin/git-shell
复制
其中 /usr/bin/git-shell
的路径可以通过命令 which git-shell
获得。
使用公匙和私匙实现免密效果
上面我们使用的过程中每次都需要输入 git 用户的密码才能和服务端交互,这样会很麻烦,这时候我们可以配置公私匙来实现免密。
首先,需要在客户端生成公私匙:
ssh-keygen -t rsa
复制
回车后会提示输入私匙的密码,如果要免密就直接回车,否则自定义一个密码(如果自定义了密码,则每次 push 和 pull 时填入的是设置的密码)。
命令执行成功后,会在当前用户目录的.ssh文件夹(Windows 目录是 X:\Users{username}.ssh, Linux 是 /home/{username}/.ssh)生成文件「id_rsa」和「id_rsa.pub」,其中 .pub 文件就是公匙,另一个是私匙。
把文件「id_rsa.pub」拷贝到服务端,并使用如下命令进行设置:
mkdir /home/git/.ssh
cp /home/currentuser/Desktop/id_rsa.pub /home/git/.ssh/authorized_keys
chown -R git:git /home/git/.ssh
复制
说明,如果 authorized_keys 文件不存在,可以使用 cp 命令,否则请使用 cat 命令追加,比如:
cat /home/currentuser/Desktop/id_rsa.pub >> /home/git/.ssh/authorized_keys
复制
为了保证配置生效,还需要查看 /etc/ssh/sshd_config 文件中的如下设置是否开启:
AuthorizedKeysFile %h/.ssh/authorized_keys
复制
是否被注释掉了,如果是,则需要把前面的 # 去掉,并重启 ssh 服务(命令 service ssh restart)。
全部配置完毕后,我们试试效果:
$ git pull
Already up-to-date.
复制
看,这次没有提示输入密码了吧,免密设置生效。
非 22 端口连接 Git
在 .ssh 配置目录现在 config 文件,内容为:
host ip地址
port 端口名
复制
config 配置文件在 Windows 和 Mac 系统的位置为:X:/users/username/.ssh 目录,其中 X 为系统盘, username 为当前登录用户名;
如果是 liunx 系列系统,位置为 /home/username/.ssh 目录,其中 username 为当前登录用户名。