windows下使用cygwin搭建git服务器

转载自: http://blog.csdn.net/vector03/article/details/53243436


在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
这样以后每次新建用户都会自动修改过来.  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值