STelnet(SSH)

STelnet 是什么

其实就是SSH(Secure Shell),一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。传统远程登录或文件传输方式,例如Telnet、FTP,使用明文传输数据,存在很多的安全隐患,SSH协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了安全的登录和其他安全网络服务。

SSH 工作原理

SSH 是由SSH Serve和SSH Client组成的。在华为的STelnet中,整个通信过程如下:

1. 连接建立

SSH服务器在指定的端口侦听客户端的连接请求,在客户端向服务器发起连接请求后,双方建立一个TCP连接。

2. 版本协商

SSH协议目前存在SSH1.X(SSH2.0之前的版本)和SSH2.0版本。SSH2.0协议相比SSH1.X协议来说,在结构上做了扩展,可以支持更多的认证方法和密钥交换方法,同时提高了服务能力。SSH服务器和客户端通过协商确定最终使用的SSH版本号。

3. 算法协商

SSH支持多种加密算法,双方根据各自支持的算法,协商出最终用于产生会话密钥的密钥交换算法、用于数据信息加密的加密算法、用于进行数字签名和认证的公钥算法以及用于数据完整性保护的HMAC算法

4. 密钥交换

服务器和客户端通过密钥交换算法,动态生成共享的会话密钥和会话ID,建立加密通道。会话密钥主要用于后续数据传输的加密,会话ID用于在认证过程中标识该SSH连接。

DH 为例,密钥交换思路如下:

协商得到共享密钥K,后续的通信(包括用户认证)数据,都使用该密钥K进行加解密,即下文中的通信过程都经过了加密。

一些问题

在密钥交换过程中,可能会出现中间人攻击的情况。即无法验证对方的身份,例如有个中间人C拦截了A发送给B的报文,该中间人C冒充B与A进行密钥交换,而A仍然认为自己是与B进行密钥交换,那么后续的通信数据就会被B所拦截并破解。因此一般在第一次连接时,会弹出一个提醒,询问客户端是否信任对端(服务端),继续进行密钥交换?信任后该Server会加入到known_hosts名单中,下次连接便不再询问,进入密钥交换。

当然,上面这种情况发生的原因主要是生成的公私密钥对未经过认证,除了上面的解决方案,还可以使用CA提供可信的数字签名秘钥

5. 用户认证

SSH客户端向服务器端发起认证请求,服务器端对客户端进行认证。SSH支持以下几种认证方式:

  • 密码(password)认证:客户端通过用户名和密码的方式进行认证,将加密后的用户名和密码发送给服务器,服务器解密后与本地保存的用户名和密码进行对比,并向客户端返回认证成功或失败的消息。

在密码认证中,还有一种非对称加密的方案,即在原本的加密基础(使用密钥协商阶段的加密算法)上,再使用非对称加密算法进行认证。即Server发送公钥,Client用该公钥加密用户名和密码,Server使用私钥解密得到用户名和密码,再进行比对,实际上就是再加了一层密。

  • 密钥(publickey)认证:客户端通过用户名,公钥以及公钥算法等信息来与服务器进行认证。

  • password-publickey认证:指用户需要同时满足密码认证和密钥认证才能登录。

  • all认证:只要满足密码认证和密钥认证其中一种即可。

6. 会话请求

认证通过后,SSH客户端向服务器端发送会话请求,请求服务器提供某种类型的服务,即请求与服务器建立相应的会话。

7. 会话交互

会话建立后,SSH服务器端和客户端在该会话上进行数据信息的交互。

SSH 配置

配置步骤:

  1. 配置VTY用户界面的支持协议类型、认证方式和用户级别。
命令
[HUAWEI] user-interface vty 0 4
[HUAWEI-ui-vty0-4] authentication-mode aaa   //配置VTY用户界面认证方式为AAA认证
[HUAWEI-ui-vty0-4] protocol inbound ssh    //配置VTY用户界面支持的协议为SSH,默认情况下即SSH
[HUAWEI-ui-vty0-4] user privilege level 15    //配置VTY用户界面的级别为15
[HUAWEI-ui-vty0-4] quit

通过STelnet登录设备需配置用户界面支持的协议是SSH,必须设置VTY用户界面认证方式为AAA认证

引申——VTY
  • 虚拟类型终端VTY(Virtual Type Terminal)用户界面:用来管理和监控通过VTY方式登录的用户。用户通过终端与设备建立Telnet或STelnet连接后,即建立了一条VTY通道。

一般来说,第一次配置交换机时,是需要通过console口进入console用户界面进行配置的,因为默认情况下是没有配置Telnet或STelnet登录方式的。

对于一台设备来说,只有一个console用户界面,而VTY类型的用户界面有20个,包括VTY 0VTY20,其中VTY 15作为保留,不使用,VTY 16~VTY 20是网管预留编号,当VTY 0VTY 14都被占用,且配置了AAA的情况下,才会使用到16~20。

  1. 开启STelnet服务器功能并创建SSH用户。
命令
[HUAWEI] ssh server-source -i Vlanif 10  //假设客户端使用IP地址10.10.10.20连接服务器,该地址对应的接口为Vlanif 10.
[HUAWEI] stelnet server enable   //使能设备的STelnet服务器功能
[HUAWEI] ssh user admin123    //创建SSH用户admin123
[HUAWEI] ssh user admin123 service-type stelnet    //配置SSH用户的服务方式为STelnet
  1. 配置SSH用户认证方式。
  • 配置SSH用户认证方式为Password 使用Password认证方式时,需要在AAA视图下配置与SSH用户同名的本地用户。
命令
[HUAWEI] ssh user admin123 authentication-type password    //配置SSH用户认证方式为password
[HUAWEI] aaa
[HUAWEI-aaa] local-user admin123 password irreversible-cipher abcd@123    //创建与SSH用户同名的本地用户和对应的登录密码
[HUAWEI-aaa] local-user admin123 privilege level 15    //配置本地用户级别为15
Warning: This operation may affect online users, are you sure to change the user privilege level ?[Y/N]  y
[HUAWEI-aaa] local-user admin123 service-type ssh    //配置本地用户的服务方式为SSH
[HUAWEI-aaa] quit
  • 配置SSH用户认证方式为RSA、DSA或ECC(以ECC认证方式为例,RSA、DSA认证方式步骤类似)
命令
[HUAWEI] ssh user admin123 authentication-type ecc    //配置SSH用户认证方式为ecc
[HUAWEI] ecc peer-public-key key01 encoding-type pem    //配置ECC公共密钥编码格式,并进入ECC公共密钥视图,key01为公共密钥名称
Enter "ECC public key" view, return system view with "peer-public-key end".
[HUAWEI-ecc-public-key] public-key-code begin    //进入公共密钥编辑视图
Enter "ECC key code" view, return last view with "public-key-code end".
[HUAWEI-dsa-key-code] 308188    //拷贝复制客户端的公钥,为十六进制字符串
[HUAWEI-dsa-key-code] 028180
[HUAWEI-dsa-key-code] B21315DD 859AD7E4 A6D0D9B8 121F23F0 006BB1BB
[HUAWEI-dsa-key-code] A443130F 7CDB95D8 4A4AE2F3 D94A73D7 36FDFD5F
[HUAWEI-dsa-key-code] 411B8B73 3CDD494A 236F35AB 9BBFE19A 7336150B
[HUAWEI-dsa-key-code] 40A35DE6 2C6A82D7 5C5F2C36 67FBC275 2DF7E4C5
[HUAWEI-dsa-key-code] 1987178B 8C364D57 DD0AA24A A0C2F87F 474C7931
[HUAWEI-ecc-key-code] A9F7E8FE E0D5A1B5 092F7112 660BD153 7FB7D5B2
[HUAWEI-ecc-key-code] 171896FB 1FFC38CD
[HUAWEI-ecc-key-code] 0203
[HUAWEI-ecc-key-code] 010001
[HUAWEI-ecc-key-code] public-key-code end    //退回到公共密钥视图
[HUAWEI-ecc-public-key] peer-public-key end    //退回到系统视图
[HUAWEI] **ssh user admin123 assign ecc-key key01    //为用户admin123分配一个已经存在的公钥key01

使用Password-RSA认证、Password-DSA认证或Password-ECC认证时,需同时配置AAA用户信息和输入客户端公钥,即上述两种方式都需要进行。

使用ALL认证方式时,对于配置AAA用户信息和输入客户端公钥,可以随意选择上述两种方式其中一种方式,也可以两种方式都选择。

  1. 在SSH服务器端生成本地密钥对,实现在服务器端和客户端进行安全地数据交互。
命令
[HUAWEI] ecc local-key-pair create
Info: The key name will be: HUAWEI_Host_ECC.
Info: The key modulus can be any one of the following: 256, 384, 521.
Info: If the key modulus is greater than 512, it may take a few minutes.
Please input the modulus [default=521]:521
Info: Generating keys..........
Info: Succeeded in creating the ECC host keys.

后记: 最近实习中接触到的项目中,有关ssh配置的错误耽误一些时间,跟着同事排错的过程又借此机会梳理了一下SSH的整个过程,并学习了一下huawei交换机的SSH配置流程。有趣的是,问题的根源是客户端上发起SSH的工具支持的算法与服务端(交换机支持的算法比较新)不匹配,导致无法进行密钥交换,最终使用最新版的Putty便解决了。

参考文章

[华为产品文档]( 华为企业产品技术支持网站 - 华为 (huawei.com) )