使用git bash在windows上搭建 git 服务器

在 windows 上安装 git,都会附带 git bash.

git bash 相关路径

git bash 是基于 msys2 的,在 windows 上任务管理器里可以看到:
msys2

git bash 的根目录

msys2 本身用来在 windows 上模拟 Linux 类环境。git bash 的根目录的实际物理目录是 git 的安装目录,在我的 windows 上,是

`D:\Program Files\Git`

可以在 git bash 里切换到根目录 cd /,然后在当前目录创建个文件来确证。

git bash 的用户目录

git bash 的用户目录和 windows 的用户目录保持一致,在系统盘 User 下。在我的 windows 上,用户目录是这个cd ~

/c/Users/Administrator

同时看到,git bash 里访问 windows 的磁盘 X 下的文件的方式为 /X/file

ssh 服务

ssh 服务需要 sshd 服务器,ssh 客户端来共同完成。一般安装 ssh 服务都会同时安装这两个程序,在 windows 上,分别是ssh.exe 和 sshd.exe.

尝试在 git bash 下启动 ssh 服务。

直接启动 sshd,报错:

sshd re-exec requires execution with an absolute path

提示需要使用绝对路径。使用 which sshd 获取绝对路径,使用最对路径启动,报错

sshd: no hostkeys available – exiting.

提示没有 key 文件,需要使用 key文件来对外标识自己的身份。

ssh-keygen -A

使用上边命令生成多个加密方式的 key 文件,提示

ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519

此命令会在 /etc/ssh 目录下,生成 8 个文件。
sshkey

之后便能正常启动 sshd。多次启动 sshd,还会生成 /etc/ssh/sshd.pid 文件,确保只有一个 sshd 进程实例。

密码登陆

ssh 服务有 ~/.ssh/config/etc/ssh/ssh_config/etc/sshsshd_config 两个配置文件,前两个是客户端配置,最后一个是服务器的配置。

修改服务器 sshd_config 配置,允许密码登陆。

PasswordAuthentication yes

重启 sshd 服务。

由于没有 Linux 上的 service 命令来管理 sshd 服务,不过 git bash 一样可以通过 ps 来查看启动的进程,同样使用 kill 来停止。

正常情况下,便可以使用 ssh 登陆 windows。注意登陆的用户名。默认 gitbash 的用户应该可 windows 的用户一致,如果使用 windows 上是用管理员登陆的,那么用 administrator 登陆即可。

在 gitbash 里使用 id 可查看当前的用户。

uid=197108(Administrator) gid=197121 groups=197121

在另外一台 Linux 服务器上,可以通过 ssh 客户端登录 windows。

ssh登录

git 服务器

将 A 机器上 windows 本地的 git 仓库作为 B 机器上某个仓库的远端仓库,进行拉取和推送。

在 A 机器上启动 sshd 服务器,默认使用 22 号端口。

A 机器如果在内网,如果B在外网,需要想办法从外网能够访问。我这里使用 ssh 端口转发来做。关于 ssh 端口转发,见之前我的一片博客.

将 B 机器本地的 6666 端口转发到 A 机器的 22 号端口上

在 B 机器上为本地的 git 仓库添加远端仓库。

git remote add origin ssh://[email protected]:6666/D/project/code_project

ssh 指定 git 使用的协议。git 一共支持 LOCAL 本地文件系统协议、HTTP 协议、SSH 协议、GIT 协议这 4 种协议。

administrator 指定用户名。

127.0.0.1:6666 指定了通信地址。

/D/project/code_project 指定了远端仓库所在的位置 (即仓库在 A 机器上的位置,这里需要使用 git bash 里识别的位置)。

同 Linux 上的一样,密码可以通过 passwd 来指定和修改。

正常情况下,就能正常的进行 pull 和 push 操作了。
pull操作
push操作

使用密码登陆,这样每次 push 和 pull 时,还需要输入密码,可以更换为 ssh key,省掉密码。

git 仓库免密

使用 ssh-key 制作没有密码的 key(key 可以本身是可以带有密码的,ssh-keygen -A 一路 enter 就没有密码)。

跟在 Linux 上一样,在 A 机器上的用户目录下创建 ~/.ssh/authorized_keys 文件,里边复制进去公钥的内容。

完毕之后,重启 A 上的 sshd 服务。

B 机器上我有多个 key,在 git 操作的时候没有可以指定 key 参数的选项(也许有我不知道的方法?),所以需要在客户端使用的 config 文件,指定特定的服务器使用特定的 key 文件。

在用户目录下的 config 文件 ~/.ssh/config 添加一下内容,指定 ssh 服务器地址 127.0.0.1:6666 使用的 key 文件,同时定义一个别名。

Host workrep
HostName 127.0.0.1
User administrator
Port 6666
IdentityFile “D:\project\code_project\keys\king_nopass”

在 B 机器上修改远端仓库的地址,使用上边定义的别名

git remote add origin ssh://workrep/D/project/code_project

在 B 机器上,往 A 上推送。
免密码推送

Guess you like

Origin blog.csdn.net/zhouguoqionghai/article/details/111083993