本文链接:https://blog.csdn.net/u010859970/article/details/79406176
在代码开发过程中,由于不能内网限制或者有需求,经常遇到需要自己搭建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\
(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
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\
# 配置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