【git-进阶】win7下搭建基于ssh的git服务器

一、背景

    在代码开发过程中,由于不能内网限制或者有需求,经常遇到需要自己搭建git环境,Linux下搭建git服务器比较容易,大家可以参考廖雪峰老师的git教程,进行搭建。而windows下搭建基于ssh的git服务器却有许多坑,由于windows下本不支持ssh服务,因此需要先安装ssh软件,然后进行设置,接下来笔者自己搭建经验和网络博客,整理了在win7下搭建基于ssh的git服务器。

    搭建完该服务器后,版本服务器和自动化运行PC、开发人员的PC之间互为备份,且在网络断开的情况下,也不会影响各自的工作。

    

二、服务器端操作

    0、安装环境:
        win7 64位
    1、所需的软件
        Git for Windows: Git-2.13.0-64-bit.exe
        OpenSSH for Windows: Copssh_4.1.0_Installer
    2、安装git
    3、安装copssh
  windows下原生不支持ssh服务,需要安装copssh来提供ssh服务。安装过程一路next就行。
    4、新建用户
         作用:用于专门管理git服务
         步骤:控制面板->用户帐户->用户帐户->管理帐户->新建用户(如git)
  ( 取消用户下次登录时须更改密码,设置密码永不过期。)
    5、设置 Copssh Control Panel

        (1) 绿色表示成功启动,如果是红色,请重新安装。

        

        如果之前安装过又卸载,则删除系统用户SvcCOPSSH即可,步骤:
            1)开始->计算机->右击->点击管理->进入计算机管理界面
            2)展开[本地用户和组]->展开用户列表->选中系统用户SvcCOPSSH->右键删除即可
       (2)启动成功,之后接着如下:

        =>选择Users,点击Add

        

        =>点击Forward,选择用户,然后点击Forward

        

        

        =>默认就行,然后点击Apply完成

        

        

        =>然后回到User那个界面,此时会看到添加了git用户,点击Apply按钮

        

        到这里copssh的配置暂告一段落。

6、关联ssh和git

    笔者安装copssh的目录为C:\ICW\,安装git的目录为C:\Program Files\Git\,其中$ICW为copssh安装目录,$Git为git安装目录。
    以下两个步骤是为了告诉ssh工具我们安装的Git在哪里。
    (1)把git的一些必要文件复制到ssh的安装目录下
    =>把将$Git\mingw64\libexec\git-core目录下的git.exe , git-receive-pack.exe , git-upload-archive.exe , git-upload-pack.exe复制到$ICW\bin目录下
     =>将$Git\mingw64\bin目录下的lib打头的dll复制到$ICW\bin目录下
     =>将$Git\mingw64下的share目录整个拷贝到$ICW下。
  (2)如果经过上面步骤不成功,则进行下面步骤:
   =>修改 $ICW/home/git/.bashrc 文件,增加如下行(注意:红色部分为git安装目录),这是加到.bashrc后面的,我们需要修改的地方是,把gitpath的/cygdrive/后面的路径改成你自己的Git安装路径下的bin目录路径;把gitcorepath的cygdrive/后面的路径改成泥自己的Git安装路径下的libexec/git-core路径(如果发现Git路径下没有libexec文件夹,看看Git下是不是有个mingw32或者mingw64,一般在这两个文件夹下):
   
gitpath='/cygdrive/c/Program Files/Git/mingw64/bin'
gitcorepath='cygdrive/c/Program Files/Git/mingw64/libexec/git-core' 
PATH=${gitpath}:${gitcorepath}:${PATH}
       =>修改 $ICW/etc/profile,在文件末尾增加如下行(注意:红色为git安装目录),#这是加到bash profile后面的,同样的我们需要按照上面的方法修改路径:
gitpath='/c/Program Files/Git/mingw64/bin'
gitcorepath='cygdrive/c/Program Files/Git/mingw64/libexec/git-core'
export PATH="/bin:$syspath:$gitpath:$gitcorepath:$winpath"

7、服务器端创建远端仓库

    打开目录$ICW/home/git/,右键选择Git Bash Here,在命令行中敲入以下命令:
git init --bare myrepo.git
    用来创建自己的远端仓库,这里的myrepo可以取自己想要的名称。选择--bare选项是为了建立一个 纯git仓库,在此位置创建的版本库应该是裸版本库,即没有工作区,不能在服务器进行修改的版本库。

    创建后的目录结构如下:        

    

      以上7个步骤是为了在服务器端搭建git环境和仓库,下面的操作均在客户端(本机)进行。

三、客户端操作

0、操作环境:

    win7 64位或者Ubuntu 16.04 64位 确保已安装git和ssh。
    以下操作均在win7下进行,linux下操作类似,只要找到对应的目录即可。

1、利用ssh-keygen产生公钥和私钥

    (1)打开目录 C:\Users\\.ssh,在该目录下右键打开GitBash,一定需要在该bash下进行操作

    (2)生成全局公钥和私钥,命令:

ssh-keygen -t rsa -C 

    一路按回车(如果需要设置密码可以自己设置)。 生成了两个文件id_rsa.pub,id_rsa,待会全局git配置的时候使用。

    (3)如果是配置单个git账号,命令:
ssh-keygen -t rsa -C 

    

    其中会提示输入公钥名字,可以任意取,本例中取的名字为id_rsa_name。产生了两个文件id_rsa_name.pub、id_rsa_name,id_rsa.pub为公钥,id_rsa为私钥。

    (4)如果需要设置多个git账户,比如github和win7服务器上分别有仓库需要管理,那么上述命令ssh-keygen -t rsa -C 执行时,分别设置不同的id_rsa名称即可,例如:id_rsa_github和id_rsa_win7,其中passphrase密码可以为空(按回车),也可以自己设置,但必须记住该密码。

2、git配置

    (1)全局git配置
ssh-add ~/.ssh/id_rsa
    然后设置邮箱和姓名
git config --global user.name 
git config --global user.email 
    例子:
git config --global user.name alexliu
git config --global user.email [email protected]
     注意这里是--global
    (2)局部git配置
    假设有github和win7服务器亮哥git仓库,此时有如下文件:

    

    首先在C:\Users\\.ssh目录下,新建一个名字为config的文件,里面填下如下内容:

# 配置github.com
Host github.com 
HostName github.com
IdentityFile C:\\Users\\alexliu\\.ssh\\id_rsa_github
PreferredAuthentications publickey
User [email protected]

# 配置win7服务器 
Host 192.168.1.1
HostName 192.168.1.1
IdentityFile C:\\Users\\alexliu\\.ssh\\id_rsa_win7
PreferredAuthentications publickey,password,keyboard-interactive
User git
Port 22
  其中,HostName是服务器的地址,User是服务器注册的用户名,IdentityFile是刚刚生成的私钥位置,PreferredAuthentications为认证方式。
     其次,将所有私钥都添加到ssh-agent中,命令如下:

ssh-add ~/.ssh/id_rsa_win7
ssh-add ~/.ssh/id_rsa_github

    最后,添加本地姓名和邮箱:

git config --local user.name 
git config --local user.email 

3、将公钥上传到SSH服务器

    (1)添加到win7服务器,命令:
    
ssh-copy-id –i ~/.ssh/id_rsa_win7.pub [email protected]
    这条命令中id_rsa.pub为公钥,[email protected]中的git为服务器刚刚创建的git用户(如果用户名为alex,则为[email protected]),192.168.1.1为服务器ip地址。

    该条命令执行成功后,会在服务端的copssh软件的user->Keys按钮下查看到你所添加的公钥。


     (2)添加到github的公钥
        找到github的设置选项,将公钥拷贝进去即可。
        命令执行后,会在客户端PC的.ssh目录下生成一个新的文件known_hosts。

四、验证是否搭建成功

    1、保证服务器端的ssh服务已经打开,如果出现打开copssh软件然后闪退的情况,则在win7的服务中将Openssh SSHD服务设置为启动,即可。


    2、假设你需要拷贝win7服务器下的myrepo.git这个仓库,在客户端打开gitbash,运行命令:
git clone [email protected]:myrepo.git
该命令下的[email protected]:myrepo.git的git为服务端用户名,myrepo.git为服务器的仓库。
运行成功,则说明windows下的git服务器搭建完毕。
    3、如果运行不成功,则尝试以下命令:

ssh –vT 

    查看打印信息,一般考虑以下几个方面的问题:    

    (1)公钥没有正确上传,可以将known_hosts中对应服务器的内容删除后,再重新向服务器添加公钥

    (2)ssh服务没有开启

    (3)git和ssh没有正确关联

    (4)如果是多个git账号,则关注下config文件是否配置正确

参考博客:
    1、 http://blog.csdn.net/code_style/article/details/38762571
    2、 https://www.cnblogs.com/reader/p/6286501.html
    

你可能感兴趣的:(版本管理)