SSH登录
当用户通过非安全的网络环境远程登录到交换机时,每次发送数据前,SSH都会自动对数据进行加密,当数据到达目的地时,SSH自动对加密数据进行解密,以此提供安全的信息保障。除此之外,SSH还提供强大的认证功能,以保护交换机不受诸如DNS和IP欺骗等攻击。
SSH采用客户端—服务器模式。设备支持SSH服务器功能,可以接受多个SSH客户端的连接。同时,设备还支持作为SSH客户端,允许与支持SSH服务器功能的设备建立SSH连接,从而实现从本地设备通过SSH登录到远程设备上。
算法和密钥
加密和解密都是在密钥的控制下进行的。密钥是一组特定的字符串,是控制明文和密文变换的唯一参数,起到“钥匙”的作用。通过加密变换操作,可以将明文变换为密文,通过解密变换操作,将密文恢复为明文。
基于密钥的算法通常有两类:对称算法和非对称密钥算法.
非对称密钥算法
非对称密钥算法是指通信的每一端都存在一对密钥,即一个私钥,一个公钥。公钥是公开的,私钥只有合法者拥有,从公钥很难分析出私钥。
非对称密钥算法可以用于加密,也就是用公钥对报文进行加密,然后由拥有私钥的合法者使用私钥对数据进行解密,这样保证数据的机密性。
非对称密钥算法还可以用于签名,比如用户1使用自己的私钥对数据进行签名,然后发给用户2,用户2可以用用户1的公钥验证签名,如果签名是正确的,那么就能够确认该数据来源于用户1。
RSA(Rivest Shamir Adleman)和DSA(Digital Signature Algorithm,数字签名算法)都是非对称密钥算法,RSA既可以用于加密,又可以用于签名,而DSA只用于签名。
SSH实现过程
在整个通讯过程中,为实现SSH认证的安全连接,服务器端与客户端要经历如下五个阶段:
表1-1 SSH服务器端与客户端建立连接的五个阶段
过程 | 说明 | 详细内容 |
版本号协商阶段 | SSH目前包括SSH1和SSH2两个版本,双方通过版本协商确定使用的版本 | |
密钥和算法协商阶段 | SSH支持多种加密算法,双方根据本端和对端支持的算法,协商出最终使用的算法 | |
认证阶段 | SSH客户端向服务器端发起认证请求,服务器端对客户端进行认证 | |
会话请求阶段 | 认证通过后,客户端向服务器端发送会话请求 | |
交互会话阶段 | 会话请求通过后,服务器端和客户端进行信息的交互 |
1.版本号协商阶段
具体步骤如下:
2.密钥和算法协商阶段
具体步骤如下:
通过以上步骤,服务器端和客户端就取得了相同的会话密钥。对于后续传输的数据,两端都会使用会话密钥进行加密和解密,保证了数据传输的安全性。
进一步的详解:(这里注意服务器公钥的作用)
密钥协商阶段
图1-3 会话ID的计算
图1-4 会话密钥的加密(图中x单位为字节)
3.认证阶段
服务器认证客户端具体步骤如下:
SSH提供两种认证方法:
认证阶段
客户端向服务器端发送自己的用户名信息,服务器端启动对该用户进行认证的程序。
SSH提供两种认证方法:PASSWORD认证和RSA认证。
4.会话请求阶段
认证通过后,客户端向服务器端发送会话请求。服务器端等待并处理客户端的请求。在这个阶段,客户端的请求被成功处理后,服务器会回应SSH_SMSG_SUCCESS包,SSH进入交互会话阶段;否则回应SSH_SMSG_FAILURE包,表示服务器处理请求失败或者不能识别请求。
5.交互会话阶段
会话请求成功后,连接进入交互会话阶段。在这个模式下,数据被双向传送。客户端将要执行的命令加密后传给服务器端,服务器端接收到报文,解密后执行该命令,将执行的结果加密发还给客户端,客户端将接收到的结果解密后显示到终端上。
如果在SSH服务器端对SSH用户配置的认证方式为password认证,则不需要配置客户端的公钥。
SSH用户采用公钥认证时,需要在服务器端配置客户端的RSA或DSA主机公钥,以便当客户端登录服务器端时,对客户端进行相应的验证。
采用公钥认证时,需要在服务器端为SSH用户指定对应客户端的公钥。当客户端登录服务器时,服务器端就会根据指定SSH用户对应的公钥对客户端进行认证。
对于已经生成的RSA或DSA密钥对,可以根据指定格式在屏幕上显示主机公钥或导出主机公钥到指定文件,从而为在远端配置主机公钥做准备。
SSH服务器端采用的认证方式不同,SSH客户端的具体配置内容不同。当客户端不支持首次认证时,SSH客户端还需要配置服务器端的公钥,以便客户端对连接的服务器进行认证。
采用SSH客户端软件时的配置
配置任务 | 说明 | 详细配置 |
生成客户端密钥 | 当采用Password认证方式时,不选 当采用公钥认证方式时,必选 | |
指定服务器IP地址 | 必选 | |
选择远程连接协议为SSH | 必选 | |
选择SSH版本 | 必选 | |
以口令方式建立SSH连接 | 当采用Password认证方式时,必选 当采用公钥认证方式时,不选 | |
以公钥认证方式建立SSH连接 | 当采用Password认证方式时,不选 当采用公钥认证方式时,必选 |
|
SSH客户端软件有很多,例如PuTTY、OpenSSH等。SSH客户端要与服务器建立连接,
需要做如下配置:
当设备作为SSH客户端和服务器端连接时,可以设置SSH客户端对访问的SSH服务器是否支持首次认证。
DH算法描述
上图中,Alice和Bob通过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