windows下使用cygwin搭建git服务器

在windows上搭建git服务器需要分两步,

首先, 要在windows环境下实现ssh服务器, 以及通过public key的authorized登陆.

其二, 要在windows下安装模拟GNU环境的git版本或者自带gui shell的git版本.

由于windows下面原生不支持ssh协议, 网上多数教程都是通过一些第三方的ssh server软件实现ssh登陆. 另外通过msysgit 和tortoisegit实现仓库管理.

但这些服务器软件大多收费, 免费版有诸多限制. 另外对于更青睐于linux命令行简单快速的用户也比较繁琐. 这里介绍的是利用Cygwin的一站式解决方案.

 

首先在cygwin官网下载在线setup文件. 该安装文件实际上是一个Cygwin的package管理器. 这里需要安装的package有, openssh, git, bash-completion以及bash-compelion-devel

之后一路安装即可.

 

cygwin安装成功后, 在管理员特权下执行bash终端. 我们先对git server端进行设置.

执行ssh-host-config, 接下来脚本会引导用户进行设定.

1. *** Query: Should StrictModes be used? (yes/no)
 这里选择yes

2. *** Query: Should privilege separation be used? (yes/no)

 这里选择yes, Cygwin会为我们建立一个特殊的windows账户用来执行sshd服务.

3. *** Query: Do you want to install sshd as a service?
    *** Query: (Say "no" if it is already installed as a service) (yes/no)

 选择yes, 会注册一个sshd的服务, 以执行server.

4. *** Query: Enter the value of CYGWIN for the daemon: []
 这里写ntsec

5. *** Info: This script plans to use 'cyg_server'.
*** Info: 'cyg_server' will only be used by registered services.
*** Query: Do you want to use a different name? (yes/no)
 Cygwin要建立一个cyg_server账户以运行sshd服务, 这里可以选择为该账户另取名字或者使用default. 我们选择no.

6. *** Query: Create new privileged user account 'DMC-PC\cyg_server' (Cygwin name: 'cyg_server')? (yes/no)
 yes, 确定建立账户. 之后输入密码, 完成config.

 

设定完毕后, 在/etc下面多出来一个sshd_config文件, 打开该文件, 将如下item的注释取消,

RSAAuthentication              yes

PubkeyAuthentication         yes

 

然后, 我们需要生成public和private key. 执行

ssh-keygen -t rsa

然后一路回车即可. 这时在我们的当前账户下就会多出来一个.ssh文件夹, 内部包含id_rsa和id_rsa.pub两个密钥文件. 之后可以通过命令, net start sshd启动sshd服务器了.

 

原则上, 到这里我们的ssh服务器已经架设完毕. 但通常情况下, 需要建立一个专门的账号以登陆git服务器. 因此这里可以先建立一个windows下的账户, 例如名字就叫git.

net user git 123 /add

这里建立了一个密码为123的git账户.

 

net localgroup administrators git /add

将该git账户添加到管理员组当中.

 

接下来登陆新的git账户, 并运行Cygwin bash终端, 可以看到会自动生成新用户git的home文件夹.  这样以后就可以在该账户下管理代码仓库了.

 

建立仓库,

在服务器端先建立远程仓库, 例如我们在e盘建立一个名为hellogit的远程仓库.

git init --bare hellogit.git

将建立hellogit的裸仓库.

 

切换到客户端机器, 同样按照之前的方式安装Cygwin.

安装成功后, 在Cygwin的bash终端下执行,

ssh-keygen -t rsa

生成客户机器的public和private key, 之后我们需要将该机器的public key注册到服务器上, 以实现免密码登陆.

ssh-copy-id git@xxx.xxx.xxx.xxx

根据提示输入登陆密码, 就会将客户机的public key写入到服务器端git账户.ssh文件夹下的authorized_keys, 这样以后就实现了public key登陆.

 

然后在客户机上通过,

git clone git@xxx.xxx.xxx.xxx:/cygdrive/e/hellogit.git

会把服务器端的hellogit仓库克隆到本地, 生成hellogit文件夹.

之后就是日常的add, commit, push, checkout, branch等等操作了, 不再赘述.

 

附加说明,

1. 如果按照上面的步骤仍然无法登陆, 可能是客户机.ssh文件夹存在权限问题, 可以手动修改,

chmod 700 .ssh

chmod 600 id_rsa

2. 另外/var/empty文件夹的uid不对也可能导致无法登陆, 可以手动指定

chown -R cyg_server /var/empty

如果提示uid不存在需要重新导入windows下的account

mkpasswd -l > /etc/passwd

mkgroup -l > /etc/group

3. 如果重新安装Cygwin后想重新设定sshd_config, 需要先删除cygwin建立的service和account

首先停止sshd服务

net stop sshd

删除服务

sc delete sshd

删除账户

net user cyg_server /del

net user sshd /del
4. 关于乱码
默认情况下, 在mintty中显示中文会出现乱码, 这是由于windows下的中文编码使用GBK,
而GNU工具默认使用UTF-8两者不匹配导致的.
解决方法是在mintty中选择options->text, 将locale改为zh_CN, char set改为GBK.
但ssh登陆后远程还是会出现乱码, 这是由于openssh使用系统默认环境变量而导致匹配错误.
需要修改远程服务器上的默认编码, 在远程用户的.bash_profile中加入,
LANG=zh_CN.GBK
export LANG
然后重新登陆即可.
或者直接修改cygwin的初始化模板, 位置在
/etc/defaults/etc/skel/.bash_profile
这样以后每次新建用户都会自动修改过来.

5. 隐藏git账户

用户仓库维护的git账户平时可能不需要登陆, 有洁癖的可以选择将之在登陆界面隐藏.

打开regedit, 找到如下路径,

\\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList

有可能这个路径在当前注册表里不存在, 那样的话就建立对应的注册表项即可.

然后建立一个新的DWORD32属性的键值, 名称为要隐藏的用户名, 例如'git, 值设为'0'.

之后注销当前用户, 看看是否在用户登陆界面已经找不到名为'git'的用户了.

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值