起步于系统工程师,迈进入测试工程师,从起初的C/S系统到互联网时代的B/S系统,从事过电信增值业务、软交换、烟草OA、公安技侦和电子商务等行业的软件测试开发和管理多年,愿与大家共同分享共同交流,关注软件项目管理、测试团队管理、软件流程控制和软件性能测试及自动化测试技术。互联网时代,技术推动进步,欢迎人才推荐:jonas.wangl@alibaba-inc.com

发布新日志

  • (整理)SSH简介及配置应用

    2009-11-08 16:18:28

    1.什么是SSH

    传统的网络服务程序,如:ftp、POP和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式,就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。

    从前,一个名为Tatu Ylnen的芬兰程序员开发了一种网络协议和服务软件,称为SSH(Secure SHell的缩写)。 通过使用SSH,你可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,虽然许多人把Secure Shell仅当作Telnet的替代物,但你可以使用它来保护你的网络连接的安全。你可以通过本地或远程系统上的Secure Shell转发其他网络通信,如POP、X、PPP和FTP。你还可以转发其他类型的网络通信,包括CVS和任意其他的TCP通信。另外,你可以使用带TCP包装的Secure Shell,以加强连接的安全性。除此之外,Secure Shell还有一些其他的方便的功能,可用于诸如Oracle之类的应用,也可以将它用于远程备份和像SecurID卡一样的附加认证。

    2.SSH的工作机制

    SSH分为两部分:客户端部分和服务端部分。

    服务端是一个守护进程(demon),他在后台运行并响应来自客户端的连接请求。服务端一般是sshd进程,提供了对远程连接的处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接。

    客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。

    他们的工作机制大致是本地的客户端发送一个连接请求到远程的服务端,服务端检查申请的包和IP地址再发送密钥给SSH的客户端,本地再将密钥发回给服务端,自此连接建立。刚才所讲的只是SSH连接的大致过程,SSH 1.x和SSH 2.x在连接协议上还有着一些差异。

    SSH被设计成为工作于自己的基础之上而不利用超级服务器(inetd),虽然可以通过inetd上的tcpd来运行SSH进程,但是这完全没有必要。启动SSH服务器后,sshd运行起来并在默认的22端口进行监听(你可以用 # ps -waux | grep sshd 来查看sshd是否已经被正确的运行了)如果不是通过inetd启动的SSH,那么SSH就将一直等待连接请求。当请求到来的时候SSH守护进程会产生一个子进程,该子进程进行这次的连接处理。

    但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH。OpenSSH是SSH的替代软件,而且是免费的,

    SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。

    3.安装使用OpenSSH

    这里主要讲的是基于FreeBSD的OpenSSH的配置,其它Unix及派生系统使用OpenSSH的方法大致相同FreeBSD中集成了OpenSSH,在很多Linux的发行版中都没有包括OpenSSH。但是,可以从网络上下载并安装OpenSSH,他是完全免费的。(可以访问OpenSSH的主页 http://www.openssh.org

    生成密钥对

    使用ssh-keygen来生成密钥对,比如要用DSA加密算法生成一个4096Bit的密钥对可以输入如下命令(具体参数请参阅man ssh-keygen):

    #ssh-keygen -b 4096 -t dsa


    %ssh-keygen -b 4096 -t dsa

    Generating public/private dsa key pair.
    Enter file in which to save the key (/home/fdy84/.ssh/id_dsa):
    (密钥对将要存的路径,括号内为默认)
    Created directory '/home/fdy84/.ssh'.
    Enter passphrase (empty for no passphrase):
    (输入口令)
    Enter same passphrase again:
    (再次输入口令,千万不要忘记否则就只有从新生成密钥了)
    Your identification has been saved in /home/fdy84/.ssh/id_dsa.
    (你的私钥)
    Your public key has been saved in /home/fdy84/.ssh/id_dsa.pub.
    (你的公钥)
    The key fingerprint is:
    bb:1b:f5:1c:77:62:90:21:59:7e:c6:65:e5:24:c6:e5 fdy84@freebsd

    密钥分发

    刚才生成了一对密钥,把私钥放在自己的机器上的~/.ssh/目录下并保证访问权限是“-rw-------”(即600)。再把生成的公钥放在要连接的远程主机的~/.ssh/目录下并改名为authorized_keys,并且保证文件除了属主外没有被人修改的权限。

    4.配置使用SSH

    配置服务端

    启动SSH服务端很简单只需要运行
    # sshd

    就可以了。或者在/etc/rc.conf中加入
    sshd_enable="YES"
    就可以在每次启动时自动运行SSH服务端了。
    SSH服务端的配置使用的配置文件是“/etc/ssh/sshd_config”,并且OpenSSH1.x和2.x的服务器配置文件均为此文件。

    配置客户端

    客户端想连接远程服务器只需要输入
    #ssh 域名(或ip)
    就可以了

    比如想以fdy84用户连接IP地址为192.168.0.6的一台远程服务器 需要键入
    # ssh 192.168.0.6 -l fdy84
    只要配置正确就可以连上远端的服务器了

    5.使用Windows下的SecureCRT进行SSH连接

    如果在Windows下想要通过SSH远程管理服务器怎么办?其实Windows有很多远程管理软件,我们在这主要介绍一下SecureCRT中SSH连接的使用。(以Version 4.1.1为准介绍)

    Create Public Key...
    SecureCRT也可以生成密钥对,不过SecureCRT最大只支持2048Bit的密钥,点选Tools->Create Public Key...,选择密钥算法和密钥长度,输入完口令后再使劲晃鼠标以给它生成密钥的足够的随机量之后就等待计算机生成密钥对,如图

    点选左上角的Connect按钮,开启Connect对话框

    再点击红圈所示的New Session按钮进入Session Options对话框

    在这里我们选择SSH连接,并填入要连接的主机名称(或者ip地址),用户名,再选择基于公钥方式的认证,点击Properties...进入密钥配置对话框

    在红色圈所示的位置填入你的私钥文件。

    现在点击刚才建立的那个连接进行SSH连接,根据提示点击几个对话框之后就连接上远程的服务器了,如图

    特别要注意的是由SecureCRT生成的密钥对和用OpenSSH生成的密钥对在格式上不一样,而且二者都只能认识自己的密钥的格式,所以在用SecureCRT同OpenSSH连接时分别都要用它们自己的密钥格式,可以用任何一个方法生成然后使用ssh-keygen -i 把SecureCRT生成的的密钥转换成OpenSSH的密钥格式,或者用ssh-keygen -e把OpenSSH的密钥格式转换成SecureCRT能够识别的IETF SECSH格式

    虽然SSH提供基于密码的登陆,不过基于安全考虑笔者并不推荐使用这种登陆,鉴于现在机器的速度普遍已经很快,推荐使用4096位的密钥以加强安全性。

    目前远程登录工具非常多,建议大家还是用开源的ssh工具。

  • 对测试环境的规划与管理一些想法

    2008-11-11 13:37:04

        测试环境是指为了完成软件测试工作所必需的计算机硬件、软件、网络设备、历史数据的总称。毫无疑问,稳定和可控的测试环境,可以使测试人员花费较少的时间就完成测试用例的执行,也无需为测试用例、测试过程的维护花费额外的时间,并且可以保证每一个被提交的缺陷都可以在任何时候被准确的重现。

        测试环境的增加是随着人员增加成正比的,好的规划和管理,定比测试团队提高效率和质量。

      一、规划测试环境——让环境为你服务

      对于“金山词霸”这样的软件,大多数测试工作都可以在一台单独的电脑上完成;对于测试web应用时,我们得准备测试环境服务器,测试clientseaver等;而对于一套电信系统,为了执行测试用例,你可能会需要搭建一个由多台计算机以及其他网络设备组成,采用集群和负载均衡技术,并且接驳到Internet的计算机网络。

      不同的行业应用,不同的质量目标,都可能会影响到测试环境的规划。但从测试工作自身的要求来看,一条应当遵守的原则就是“尽可能的还原软件在用户或是生产线那里最终实际运行的环境。

      通常来说,我们所需要搭建的环境,主要是用于被测应用的系统测试——单元测试和集成测试由开发人员在开发环境中进行,而验收测试则在用户的最终应用环境中进行,因此都可以暂不考虑。

      为了确定测试环境的组成,我们需要明确以下问题:

      1. 所需要的计算机的数量,以及对每台计算机的硬件配置要求,包括CPU的速度、内存和硬盘的容量、网卡所支持的速度、打印机的型号等;

      2. 部署被测应用的服务器所必需的操作系统、数据库管理系统、中间件、WEB服务器以及其他必需组件的名称、版本,以及所要用到的相关补丁的版本;

      3. 用来保存各种测试工作中生成的文档和数据的服务器所必需的操作系统、数据库管理系统、中间件、WEB服务器以及其他必需组件的名称、版本,以及所要用到的相关补丁的版本;

      4. 用来执行测试工作的计算机所必需的操作系统、数据库管理系统、中间件、WEB服务器以及其他必需组件的名称、版本,以及所要用到的相关补丁的版本;

      5. 是否需要专门的计算机用于被测应用的服务器环境和测试管理服务器的环境的备份;

      6. 测试中所需要使用的网络环境。例如,如果测试结果同接入Internet的线路的稳定性有关,那么应该考虑为测试环境租用单独的线路;如果测试结果与局域网内的网络速度有关,那么应该保证计算机的网卡、网线以及用到的集线器、交换机都不会成为瓶颈;

      7. 执行测试工作所需要使用的文档编写工具、测试管理系统、性能测试工具、缺陷跟踪管理系统等软件的名称、版本、License数量,以及所要用到的相关补丁的版本。对于性能测试工具,则还应当特别关注所选择的工具是否支持被测应用所使用的协议;

      8. 为了执行测试用例,所需要初始化的各项数据,例如登陆被测应用所需的用户名和访问权限,或其他基础资料、业务资料;对于性能测试,还应当特别考虑执行测试场景前应当满足的历史数据量。当然,还有另外一个非常关键的问题:在测试过程中受到影响的数据如何恢复?

      明确了上面的问题后,明确哪些条件是可以满足的,哪些是需要其他部门协助调配、采购或者支援的。建议在搭建测试环境之前,把上面的问题做成一张CheckList,并为每一项指定一个责任人,完成一项就填写一项,最终形成的文档则作为测试环境的配置说明文档使用。当然,如果时间或其他条件允许,应当做好应急预案,尽量保证在环境失效时不会对正常工作产生太大的影响。

Open Toolbar