VRP系统登录配置实战——2

SSH登录

当用户通过非安全的网络环境远程登录到交换机时,每次发送数据前,SSH都会自动对数据进行加密,当数据到达目的地时,SSH自动对加密数据进行解密,以此提供安全的信息保障。除此之外,SSH还提供强大的认证功能,以保护交换机不受诸如DNS和IP欺骗等攻击。

SSH采用客户端—服务器模式。设备支持SSH服务器功能,可以接受多个SSH客户端的连接。同时,设备还支持作为SSH客户端,允许与支持SSH服务器功能的设备建立SSH连接,从而实现从本地设备通过SSH登录到远程设备上。

算法和密钥

 加密和解密都是在密钥的控制下进行的。密钥是一组特定的字符串,是控制明文和密文变换的唯一参数,起到钥匙的作用。通过加密变换操作,可以将明文变换为密文,通过解密变换操作,将密文恢复为明文。


基于密钥的算法通常有两类:对称算法和非对称密钥算法.

非对称密钥算法

非对称密钥算法是指通信的每一端都存在一对密钥,即一个私钥,一个公钥。公钥是公开的,私钥只有合法者拥有,从公钥很难分析出私钥。

非对称密钥算法可以用于加密,也就是用公钥对报文进行加密,然后由拥有私钥的合法者使用私钥对数据进行解密,这样保证数据的机密性。

非对称密钥算法还可以用于签名,比如用户1使用自己的私钥对数据进行签名,然后发给用户2,用户2可以用用户1公钥验证签名,如果签名是正确的,那么就能够确认该数据来源于用户1

RSARivest Shamir Adleman)和DSADigital Signature Algorithm,数字签名算法)都是非对称密钥算法,RSA既可以用于加密,又可以用于签名,而DSA只用于签名

SSH实现过程

在整个通讯过程中,为实现SSH认证的安全连接,服务器端与客户端要经历如下五个阶段:

          表1-1 SSH服务器端与客户端建立连接的五个阶段

过程

说明

详细内容

版本号协商阶段

SSH目前包括SSH1和SSH2两个版本,双方通过版本协商确定使用的版本

密钥和算法协商阶段

SSH支持多种加密算法,双方根据本端和对端支持的算法,协商出最终使用的算法

认证阶段

SSH客户端向服务器端发起认证请求,服务器端对客户端进行认证

会话请求阶段

认证通过后,客户端向服务器端发送会话请求

交互会话阶段

会话请求通过后,服务器端和客户端进行信息的交互

1.版本号协商阶段

具体步骤如下:

  •              服务器端打开端口22,等待客户端连接。
  •              客户端向服务器端发起TCP初始连接请求TCP连接建立后,服务器端向客户端发送第一个报文,包括版本标志字符串,格式为SSH<主协议版本号>.<次协议版本号><软件版本号>”,协议版本号由主协议版本号和次协议版本号组成,软件版本号主要是为调试使用。
  •              客户端收到报文后,解析该数据包,如果服务器端的协议版本号比自身的低,且能支持服务器端的版本,就使用服务器端的低版本协议号,否则使用自身的协议版本号。
  •               客户端回应服务器端一个报文,包含了客户端决定使用的协议版本号。服务器端比较客户端发来的版本号,决定是否能同客户端一起工作。
  •              如果协商成功,则进入密钥和算法协商阶段,否则服务器端断开TCP连接。

2.密钥和算法协商阶段

具体步骤如下:

  •              服务器端和客户端分别发送算法协商报文给对端,报文中包含自己支持的公钥算法列表、加密算法列表、MACMessage Authentication Code,消息验证码)算法列表、压缩算法列表等。
  •              服务器端和客户端根据对端和本端支持的算法列表得出最终使用的算法
  •              服务器端和客户端利用DH交换(Diffie-Hellman Exchange)算法主机密钥对等参数,生成会话密钥和会话ID

通过以上步骤,服务器端和客户端就取得了相同的会话密钥。对于后续传输的数据,两端都会使用会话密钥进行加密和解密,保证了数据传输的安全性。

进一步的详解:(这里注意服务器公钥的作用

     密钥协商阶段

  •             版本协商成功后,服务器向客户端发送一个包,内容为自己的主机公钥(host public key,服务器公钥(server public key,支持的加密算法,认证算法,协议扩展的标志,还有一个8字节(64bits)的随机数(cookie。这个包没有加密,也是明文发送。然后双方开始计算会话IDsessionid)。双方使用相同的参数计算出相同的长为16字节的会话ID。计算公式如下。


1-3 会话ID的计算

  •     客户端还要随机生成一个32字节的会话密钥(session key),用来加密传输的数据,但不直接把该密钥传给服务器端,而是用该密钥的前16字节与或(XOR)会话ID16字节,后16字节不变,所得结果按MSB(Most Significant Bit,最高位优先排列成一个MP型整数,用模数较小的公钥进行加密,再把结果按MSB优先顺序排列成一个MP型整数,用模数较大的公钥进行加密,如下所示。


1-4 会话密钥的加密(图中x单位为字节)

  • 其中所得result3即为要传输给对端的加密后的会话密钥,把它和客户端选择的加密算法、服务器传来的8字节cookie、自己的协议标志一起发给服务器端。服务器收到这个包含会话密钥信息的消息后,还原出会话密钥。
  • 通过以上步骤,服务器端和客户端就取得了相同的会话密钥。会话时,两端都使用会话密钥进行加密和解密,保证了数据传送的安全。

3.认证阶段

服务器认证客户端具体步骤如下:

  • 客户端向服务器端发送认证请求,认证请求中包含用户名、认证方法、与该认证方法相关的内容(如:password认证时,内容为密码)
  • 服务器端对客户端进行认证,如果认证失败,则向客户端发送认证失败消息,其中包含可以再次认证的方法列表。
  • 客户端从认证方法列表中选取一种认证方法再次进行认证。
  • 该过程反复进行,直到认证成功或者认证次数达到上限,服务器关闭连接为止。

SSH提供两种认证方法:

  • password认证:客户端向服务器发出password认证请求,将用户名和密码加密后发送给服务器;服务器将该信息解密后得到用户名和密码的明文,与设备上保存的用户名和密码进行比较,并返回认证成功或失败的消息。
  • 公钥认证:采用数字签名的方法来认证客户端。目前,设备上可以利用RSADSA两种公共密钥算法实现数字签名客户端发送包含用户名、公共密钥和公共密钥算法的公钥认证请求给服务器端。服务器对公钥进行合法性检查,如果不合法,则直接发送失败消息;否则,服务器利用数字签名对客户端进行认证,并返回认证成功或失败的消息。

  认证阶段

客户端向服务器端发送自己的用户名信息,服务器端启动对该用户进行认证的程序。

SSH提供两种认证方法:PASSWORD认证和RSA认证。

  • PASSWORD认证:客户端向服务器发出PASSWORD认证请求,将用户名和密码加密后发送给服务器;服务器将该信息解密后得到用户名和密码的明文,与设备上保存的用户名和密码进行比较,并返回认证成功或失败的消息。
  • RSA认证:服务器端必须已经配置了客户端的RSA公钥。认证时,客户端发送RSA认证请求和自己的公钥模数给服务器端,服务器进行合法性检查,如果不合法,则直接发送失败消息,否则产生一个32字节的随机数,按上面所讲生成一个MP型整数,并用客户端的公钥加密后向客户端发起一个认证挑战。客户端收到挑战消息后用自己的私钥解密得到MP型整数,用它和会话号(session ID)生成消息摘要MD5值,把这个16字节的MD5值加密后发送给服务器。服务器接收后还原出MD5值并与它自己计算出的MD5值相比较,如果相同,认证成功,发送成功消息;否则失败,发送失败消息。从这个认证过程中可以看出,只有拥有私钥的人才能登录,其过程如下所示。


4.会话请求阶段

认证通过后,客户端向服务器端发送会话请求。服务器端等待并处理客户端的请求。在这个阶段,客户端的请求被成功处理后,服务器会回应SSH_SMSG_SUCCESS包,SSH进入交互会话阶段;否则回应SSH_SMSG_FAILURE包,表示服务器处理请求失败或者不能识别请求。

5.交互会话阶段

会话请求成功后,连接进入交互会话阶段。在这个模式下,数据被双向传送。客户端将要执行的命令加密后传给服务器端,服务器端接收到报文,解密后执行该命令,将执行的结果加密发还给客户端,客户端将接收到的结果解密后显示到终端上

  •  配置password认证时,SSHusername应与AAA中定义的有效用户名一致;配置公钥认证时,username就是SSH本地用户名,不需要在AAA中配置本地用户。
  •  如果用户配置的缺省认证方式为password,并且采用AAA本地认证,则还需要使用local-user命令在本地数据库中添加用户名和密码。在这种情况下,可以直接使用local-user命令配置的用户名和密码(配置service-type为ssh)登录SSH服务器,省略掉sshuser命令的配置。
  •  如果用户配置的缺省认证方式为password,并且采用远程认证,如RADIUS认证,则可以直接使用远程服务器上的用户名和密码登录SSH服务器,省略掉ssh user命令的配置。
  •  如果配置为公钥认证方式,则SSH用户登录服务器后可以访问的命令级别可通过userprivilege level命令来配置,且所有使用公钥认证方式的用户可访问的命令级别相同。
  •  如果配置为passwordpassword-publickey认证方式,则SSH用户登录服务器后可以访问的命令级别由AAA来授权,使用passwordpassword-publickey认证方式的不同用户,能够访问的命令级别可以不同。
  •  如果配置为all认证方式,则SSH用户登录服务器后可以访问的命令级别具体由用户是通过password认证还是公钥认证来决定。

如果在SSH服务器端对SSH用户配置的认证方式为password认证,则不需要配置客户端的公钥。

SSH用户采用公钥认证时,需要在服务器端配置客户端的RSADSA主机公钥,以便当客户端登录服务器端时,对客户端进行相应的验证。

采用公钥认证时,需要在服务器端为SSH用户指定对应客户端的公钥。当客户端登录服务器时,服务器端就会根据指定SSH用户对应的公钥对客户端进行认证。

对于已经生成的RSADSA密钥对,可以根据指定格式在屏幕上显示主机公钥或导出主机公钥到指定文件,从而为在远端配置主机公钥做准备。

SSH服务器端采用的认证方式不同,SSH客户端的具体配置内容不同。当客户端不支持首次认证时,SSH客户端还需要配置服务器端的公钥,以便客户端对连接的服务器进行认证。

采用SSH客户端软件时的配置

配置任务

说明

详细配置

生成客户端密钥

    当采用Password认证方式时,不选

    当采用公钥认证方式时,必选

指定服务器IP地址

必选

选择远程连接协议为SSH

必选

选择SSH版本

必选

以口令方式建立SSH连接

     当采用Password认证方式时,必选

     当采用公钥认证方式时,不选

以公钥认证方式建立SSH连接

      当采用Password认证方式时,不选

      当采用公钥认证方式时,必选

 











SSH客户端软件有很多,例如PuTTYOpenSSH等。SSH客户端要与服务器建立连接,

需要做如下配置:

  •  选择远程连接协议为SSH。通常客户端可以支持多种远程连接协议,如TelnetRloginSSH等。要建立SSH连接,必须选择远程连接协议为SSH
  •  选择SSH版本。由于设备目前支持的版本是SSH2.0版本,客户端可以选择2.02.0以下版本。
  •  指定私钥文件。如果在服务器端配置了SSH用户采用公钥认证,并为SSH用户指定了公钥,就必须在客户端指定与公钥对应的私钥文件RSADSA密钥对是由客户端软件附带的工具生成

 

设置SSH客户端是否支持首次认证

当设备作为SSH客户端和服务器端连接时,可以设置SSH客户端对访问的SSH服务器是否支持首次认证。

  • 如果支持首次认证,是指当SSH客户端首次访问服务器端,而客户端没有配置服务器端的主机公钥时,用户可以选择继续访问该服务器端,并在客户端保存该主机公钥;当用户下次访问该服务器端时,就以保存的主机公钥来认证该服务器。
  • 如果不支持首次认证,则当客户端没有配置服务器端的主机公钥时,客户端将拒绝访问该服务器。用户必须事先将要访问的服务器端的主机公钥配置在本地,同时指定要连接的服务器端的主机公钥名称,以便客户端对连接的服务器进行认证。

DH算法描述


上图中,AliceBob通过DH算法生成秘钥K
其中:

·        g、p是2个非私密数据

·        a、b是私密数据

·        A是根据:g、p、a算出来的非私密数据;B是根据:g、p、b算出来的非私密数据

·        把A从a传到b,根据求K公式,b得到秘钥k;a同理;

注:

·        p是一个大素数。p的位数决定了攻击者破解的难度

·        g则不需要很大,并且在一般的实践中通常是2或者5

1、password认证

客户端配置登录:

点击Open时,出现提示:


点击是,此时服务器端的主机公钥将被保存在putty的缓存中,用以登录信息加密。


添加acl控制:


这里有一点要注意,我配置的vty的ssh登录原先是0 4,而我设置的acl把它指定在vty 0 3上,原来的想法是从任何一台机器都可登录,测试后发现如下规律:

如果acl指定在0 3,那么一开始的登录只能在acl指定的IP地址的主机上登录,直到vty 3登录后,到vty4时,所有机器都可登录。如果acl指定在vty 3 4,那么一开始vty 0 2任何一台机器都可登录,到vty3后,只能在acl指定的ip主机上登录。

就是说用户登录时,vty用户界面的分配是按照编号从小到大的顺序分配的,小的没有分配完,不会分配大的

如上图,acl指定在vty 3 4,在192.168.138.1的主机上可以登录到vty2,再次登录时就无法登录了,因为这时acl起作用。

2、RSA认证


使用puttygen工作生成客户端的主机密钥对,如下:


分别点击save public key 和save private key两个按钮,保存公钥和私钥为rsakey.pub和rsaprivate.ppk两个文件。

使用sshkey工具对公钥进行转换:

点击保存,将转换后的结果保存到文本文件中代用,实际就是上图中中间部分Convert Resoult框中的内容。

在交换机上配置客户端主机密钥对的公钥:

配置客户端登录界面:

主要增加的是在SSH——Auth界面下指定私钥文件。点击open进行登录,如下


与telnet登录界面相比,发现一处不同,就是header login information信息显示的位置不同,telnet是在输入用户名之前就显示了,而ssh是在输入用户名之后显示的。

还有一处,就是display local-user的结果:

ssh用户不属于local-user。

3、DSA认证

下一步将配置客户端的主机公钥到交换机中,正常的配置是先在客户端生成客户端主机密钥对:

対生成的公钥进行转换,变成十六进制格式可在交换机配置界面输入,如果转换成功,那么下一步在交换机上执行

输入完成后,接着

[SSHDSA-dsa-key-code]public-key-code end

[SSHDSA-dsa-public-key]peer-public-key end

[SSHDSA]ssh user dsau1 assign dsa-keyclientdsakey

至此,交换机设置完毕,然后配置客户端,指定私钥,登录即可。

出现的问题是:生成的DSA公钥无法转换成十六进制格式,无法在公钥密码编辑处输入,需要解决DSA公钥转换问题。

 

4、passwor-rsa认证

配置客户端连接选项,主要是要指定客户端的私钥:

查看运行的结果:



增加一级安全设置,使用super password level level cipher password设置一个super密码,把用户的初始级别设成级别较低的值,如1

在登录进行操作:

在以上的配置中,可以随时加上ACL控制策略,方法是先创建策略,如acl 2001,然后在vty界面进行指定,如vty 0 4下使用:acl 2001 inbound

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值