一.SSH+SVN搭建及配置
注意,服务器ssh服务必须开22端口,否则无法访问
1.安装ssh服务和subversion服务:
yum install openssh-server
yum install subversion
2.创建登陆svn的系统用户
useradd drliaoku
提示此系统用户必须是可以登陆的。如果不可以登陆,在链接svn时,会提示链接不上。
3.建立svn服务存储目录:mkdir /svndata
4.创建svn代码版本库
svnadmin create drkuliao
svnadmin create drkuliaowe
[root@git-server drkuliao]# pwd
/svndata/drkuliao
[root@git-server svndata]# ls
drkuliao drkuliaoweb
[root@git-server svndata]# cd drkuliao
[root@git-server drkuliao]# ls
conf db format hooks locks README.txt
[root@git-server drkuliao]# cd ../drkuliaoweb/
[root@git-server drkuliaoweb]# pwd
/svndata/drkuliaoweb
[root@git-server drkuliaoweb]# ls
conf db format hooks locks README.txt
5.为svn代码版本库赋予ssh+svn用户组的权限
chown -R drliaoku.drliaoku svndata
[root@git-server svndata]# ll
total 8
drwxr-xr-x 6 drliaoku drliaoku 4096 May 6 08:54 drkuliao
drwxrwxr-x 6 drliaoku drliaoku 4096 May 6 11:43 drkuliaoweb
6.配置ssh+svn用户的密钥:
切换到svn的管理用户:
[root@git-server svndata]# su – drliaoku
生成公私钥文件:
[drliaoku@git-server .ssh]$ ssh-keygen -t rsa -f drliaoku
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in drliaoku.
Your public key has been saved in drliaoku.pub.
The key fingerprint is:
ff:e1:72:39:f1:6a:56:21:b7:93:55:6a:e1:56:43:71 drliaoku@git-server
The key's randomart image is:
+--[ RSA 2048]----+
| .oE|
| ..+|
| . +o|
| . B .|
| S = = |
| . . = |
| . .= . |
| .o*.. |
| =+o |
+-----------------+
[drliaoku@git-server .ssh]$ ls
drliaoku drliaoku.pub
生成之后会产生两个文件,drliaoku 和drliaoku.pub,其中前者为密钥,后者为公钥
进入.ssh目录,配置密钥,将drliaoku.pub的内容导入到authorized_keys文件内,为了服务器安全,需要配置禁止ssh+svn用户登录服务器,但是可以访问svn服务。
[drliaoku@git-server ~]$ cat /home/drliaoku/.ssh/drliaoku.pub >>/home/drliaoku/.ssh/authorized_keys
[drliaoku@git-server ~]$ cat /home/drliaoku/.ssh/authorized_keys
ssh-rsa AAAAB567NzaCABIwAAAQEAoEDg3UOu21d4E2MhoT3q2AJ4Ss+YLrlsZg7k6aFwxpQVWPEXPAX9x7ks2k4GDk6MHzhPd+uhfDSu3VtkxXUd9BtL7G3oScOBQbaLQxh7ZzCUp+yCfwXdgJ+ycoDJTvgZ6wMq9xPhch8H7gnWTx9DXkSdbmvOd3Q7g6kdZhCt37exJeJYChb4CT4NAnGIHSKEXjOFPZPkNaNBJ8kqGuvBemuhJQwpV2r9atNqEXx6rlIunqQF1lZ8KH3tCiwHrNbYJore2UfXY2+/joJHtrshXRGfu3CEXuwhgiBnudhTu6VIgKrAZ0UfuoOE/dN4y8f/qhcPg4eoxQ== drliaoku@git-server
在密钥的前面加上一下内容:
command="/usr/bin/svnserve -t -r /svnserver --tunnel-user=ppwenxue",no-port-forwarding,no-pty,no-agent-forwarding,no-X11-forwarding
command="" #用户登录后执行的命令
/usr/bin/svnserve -t # 以隧道模式启动svnserver
-r /svnserver # 指定svn库路径。
--tunnel-user=ppwenxue # 指定svn用户。
注意:文件名称必须为authorized_keys并且这个文件的权限必须是600权限才行
![](/qrcode.jpg)
二.服务端防火墙配置:
需要工具有ipset和iptables结合来实现:
安装:yum –y install ipset iptables
创建ipset集合:
ipset create svn_ssh_src hash:net //创建集合名称
ipset add svn_ssh_src 网段或IP //向集合内插入网段或IP
/etc/init.d/ipset save //保存ipset集合到/etc/sysconfig/ipset配置文件内,防止服务器重启丢失。
iptables -A INPUT -p tcp -m set --match-set svn_ssh_src src -m tcp --dport 22 -j ACCEPT
//只允许ipset集合内的网段或者ip访问服务器的22端口,这样的话管理比较方便,不用每次写iptables规则,只需要维护ipset集合就可以了。
以上为服务器配置
三.以下为windows客户端连接的配置
1.在windows下通过PuTTY进行服务器登陆
(1) 下载PuTTY相关文件
下载以下文件:pageant.exe, putty.exe, puttygen.exe
Windows上安装puTTY软件,主要是用来加载上传到windows上的服务器私钥文件drliaoku生成drliaoku.ppk文件的。
(2) 生成PuTTY密钥ppk文件
将服务器上生成的私钥文件drliaoku文件(密钥)拷贝到windows中.
到puTTY安装目录找到puyytgen.exe来加载服务器上的私钥drliaoku生成drliaoku.ppk文件
到此处ppk文件生成完成
(3)加载生成的ppk密钥文件,然后通过puttygen.exe来登陆服务器
最后点击Add Key,增加key
(4) 使用PuTTY登陆服务器
打开PuTTY.exe,在session中输入服务器地址,端口号:22。在Connection->SSH->Auth中选择Browse,选择刚才生成的drliaoku.ppk文件,点击登录。此时提示输入passphrase登陆,如果输入之后能登陆系统,则说明设置成功。
点击open,出现
没有加隧道模式,导致的直接登陆到了服务器。
现在在/home/drliaoku/.ssh/authorized_keys 这个文件中加入隧道模式
[drliaoku@git-server .ssh]$ vim authorized_keys
command="/usr/bin/svnserve -t -r /svndata --tunnel-user=drliaoku",no-port-forwarding,no-pty,no-agent-forwarding,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAoEDg3UOu21d4E2MhoT3q2AJ4S
s+YLrlsZg7kQVWPEXPAX9x7ks2k4GDk6MHzhPd+uhfDSu3VtkxXUd9BtL7G3oScOBQbaLQxh7ZzCUp+yCfwXdgJ+ycoDJTvgZ6wMq9xPhch8H7gnWTx9DXkSdbmvOd3Q7g6kdZhCt37exJeJYChb4CT4NAnGIHSKEXjOFPZPkNaNBJ8kqGuvBemHp
z4eVw/BGoAuhJQwpV2r9atNqqQF1lZ8KH3tCiwHrNbYJore2UfXY2+/joJHtrshXRGfu3CEXuwhgiBnudhTu6VIgKrAZ0UfuoOE/dN4y8f/qhcPg4eoxQ== drliaoku@git-server
再次登陆服务器,此时已经登陆不上服务器了。
因为设置ppwenxue帐号为隧道模式访问svn服务,不能直接登录服务器。
2.windows端svn客户端软件安装
软件包:
设置svn的url
svn+ssh://[email protected]/drkuliaoweb
到此处配置完成
检查版本库代码
检出成功
四.此方案的安全方面的介绍
1.提取版本库代码的权限控制方面:
每个用户要想更新版本库时,必须要把自己电脑的公钥放到svn版本库的服务器上,这样才能更新代码版本库,要是有用户离职的话,直接在服务器上去掉用户的公钥就可以了,这样用户就不会在有权限更新代码了
2.各个的代码版本库目录权限的控制:
直接在root账户下登陆服务器,执行代码的版本库创建命令就可以了
svnadmin create /svndata/drkuliaotest
不需要对代码的版本库目录文件权限做任何改动的,同时也不需要对版本库的中conf目录下的任何文件做改动的,下面的这些文件只需要保持默认就可以了
[root@git-server conf]# ls
authz passwd svnserve.conf
[root@git-server conf]# pwd
/svndata/drkuliao/conf
3.对于服务器安全考虑,权限的控制
对/etc/ssh/sshd_config配置文件中sshd服务端口的设置
[root@VM_82_178_redhat .ssh]# grep Port /etc/ssh/sshd_config
Port 22
Port 12570
#GatewayPorts no
[root@VM_82_178_redhat .ssh]# ss -lntup|grep sshd
tcp LISTEN 0 128 *:22 *:* users:(("sshd",pid=6976,fd=4))
tcp LISTEN 0 128 *:16070 *:* users:(("sshd",pid=6976,fd=3))
然后在iptables中进行访问22端口的iptables配置策略的设置
允许公司的IP地址才能访问22端口,其他的地址全部拒绝掉
同时也可以配置***,只允许***的IP地址访问22端口,这样的话回家下载代码版本库的话,只需要登陆***然后再拉取代码版本库就可以了