通俗易懂的ssh原理

运维 系统运维
SSH是一个运行在传输控制层上的应用程序。他跟Telnet相比,提供了强大的认证与加密性能。他可以保证在我们连接到网络设备的过程中,其传输的数据是加密处理过的。这么做,就是为了保障帐户与口令的安全。

很多设备,如路由器、防火墙等等,都提供了一种远程访问与管理的接口。如Windows服务器可以利用Telnet协议进行远程管理等等。但是,Telnet不怎么安全。因为其在传输过程中,帐户与密码都是明文传输的。在网络传输过程中,这是非常危险的。因为黑客通过一些网络嗅探工具,能够轻易的窃取网络中明文传输的帐户与密码。故,笔者是不建议通过Telnet协议对网络设备与服务器进行远程管理。   针对Telnet协议不安全这种情况,有人开发出了一个SSH协议。其原理跟Telnet类似,只是其具有更高的安全性。SSH是一个运行在传输控制层上的应用程序。他跟Telnet相比,提供了强大的认证与加密性能。他可以保证在我们连接到网络设备的过程中,其传输的数据是加密处理过的。这么做,就是为了保障帐户与口令的安全。

  一、SSH软件包的构成。

  SSH软件包由服务器端与客户端两部分构成。服务器端主要是安装在被控制端,即我们需要进行远程管理的对象。而客户端就是安装在操作方的主机上。SSH软件包适用于所有的操作系统,包括微软、Linux以及思科公司的IOS操作系统等等。不过具体的应用上,还是有一定的差别。如SSH服务器端之能够安装在微软的服务器版本中,而在Linux系统上在没有这个限制,等等。

  另外,现在的SSH主要包括两个版本,分别为SSH1 SSH2SSH1是一个完全免费的软件包;而SSH2则是一个需要付费的软件包。天下没有免费的午餐,SSH2付费版的功能要比SSH1 免费版的功能强大的多。但是,因为其要付费,所以其应用范围还没有SSH1 广。在实际应用中,需要注意SSH2SSH1版本是两个完全不同的协议并且互不相容。也就是说,你服务端装的是SSH2版本,但是,若你客户端装的是SSH1版本的,则无法利用这个客户端连接到服务器上去。因为两者不兼容。这是在工作中,需要十分注意的一个问题。

  二、SSH的认证方式。

  一般来说,SSH提供了两种安全认证方式。

  一是基于口令的安全认证。在这种认证方式下,用户只需要知道帐户与口令,就可以利用SSH协议远程登陆到服务器。在这种认证模式下,其传输的数据,包括用户名与密码,是密文传输的。但是,他有一种缺陷。也就是说,他不能够保证你正在连接的服务器就是你想连接的服务器。因为他不会验证客户端与服务器端的身份,所以,可能会有人冒充真正的服务器,而管理员却不知情。这种攻击方式,又叫做“中间人”攻击。也算是一个比较“著名”的攻击方式了。

  二是基于密钥的安全认证。在这种安全认证方式下,需要依靠密钥进行认证。此时,用户需要为自己创建一对密钥。用户要通过其他安全的方式,把公钥方在需要远程管理的服务器上。当管理员连接到SSH服务器上的时候,客户端会向服务器发出请求,要求其利用客户端的密钥进行安全性认证。服务器收到客户端的请求后,就会利用你事先发给他的公钥进行比较、辨别。如要两个密钥一致的话,服务器就用公钥加密质询并把它发送给客户端软件。客户端软件接收到服务器的质询后,就可以利用私人密钥进行解密并把结果发送给服务器。这种方式跟第一种方式相比,就是可以保障SSH服务器的合法性,有效的避免“中间人”攻击。

  现在SSH1SSH2两个版本的SSH软件包,都支持这种安全认证方式。由于后一种安全认证方式比较复杂。故用户登录到服务器的时间可能会比较长,有时候甚至会需要一分钟的等待时间,甚至更长。当开始第一个会话的时候,在SSH用户认证提示出现之前,会在客户端上有一个“.”号提示符。一般情况下,这个提示符并不影响SSH的功能。当用户在SSH密钥交换期间,使用私钥生成服务器密钥或者加密一个消息的时候,在用户认证出现之前,这个提示符将会出现在SSH客户端上。我们可以把它看作是一个进程指示器,表示SSH正忙,没有当机。这个过程根据网络状况的不同,持续的时间也有长短。一般在两分钟以内的,可以当作正常情况。若超过这个时间的话,则管理员就需要调整相关的配置,不然会对SSH的正常操作产生影响。

  不过采用第二种认证方式的话,会给管理员一个额外的收获。如果你的网络中,有很多个SSH服务器。如一个FTP文件服务器还有一个Cisco防火墙,你都部属了一个SSH服务器的话,则此时你作为管理员,就可以只用一个口令就登录到所有你想登录的服务器上去。

  三、配制实例。

  由于SSH采用了加密机制,所以其配制起来比Telnet协议要复杂一点。下面笔者就以Cisco的防火墙服务器为例,看看如何配置SSH协议,让其在服务器上生效。

  为了让防火墙启用SSH服务,则需要通过五个步骤。

  第一步:配置防火墙主机名。

  这个步骤虽然不是启用SSH服务的必备步骤。不过,笔者还是建议用户给防火墙起一个合适的名字。当通过客户端访问SSH服务期的时候,输入名字要比输入IP地址简单的多。而且,名字也比枯燥无味的数字好记的多。故起一个容易记忆的SSH服务器名字,是SSH服务器管理的基础。

  在Cisco防火墙中,可以利用hostname命令来配置SSH服务器的名字。为了便于识别,一般在取名的时候,需要符合一定的规则。如利用“设备名称-实体名字”规则来命名。

  第二步:生成密钥对。

  在Cisco防火墙中,其建议采用的是“密钥认证安装方式”。所以,需要为其生成密钥对。这个步骤也很简单,因为防火墙中已经有默认的事项方式。管理员只需要在命令行中,输入:ca generate rsa key 1024这个命令,防火墙操作系统就会自动生成一个密钥对。密钥对生成后,管理员还需要使用命令CA SAVE ALL命令,把这个密钥对保存起来。

  这里要注意,不同的系统采用的加密机制不同,所以,生成的密钥对方式也不同。作为企业安全管理人员来说,应该对密钥生成的方式有一个统一的规划。在安全允许的情况下,最后在公司内部统一安全密钥的生成方式。这可以大大的减少我们维护的工作量。

  第三步:指定客户端的IP地址。

  Cisco防火墙为了提高远程管理的安全性,特别进行了一个IP地址的过滤。在SSH服务器上,必须指定客户端的IP地址。只有允许的Ip地址,才可以通过SSH客户端连接到SSH服务器上。

  这是一个很重要的安全控制手段。通过这种方式,则只有特定的客户端才可以利用SSH协议远程管理防火墙。而未经授权的客户端无权进行访问。这让SSH远程管理安全性更有保障。

  管理员可以利用ssh ip_adress 命令,来配置允许访问的客户端IP地址。一般情况下,只允许管理员才可以通过SSH方式访问远程主机。

  第四步:设置访问口令。

  为了保障SSH的安全,虽然已经限制了客户端,但是仍然非常有必要为其设置一个访问帐户与口令。有时候,SSH服务器也会有默认的用户名。但是,为了SSH服务器的安全,笔者强烈建议用户在第一时间把这个默认密码改掉。在第一时间更改服务器与设备的默认帐户与密码,是网络安全人员要养成的一个必备的工作习惯。在SSH中,可以采用password命令来更改ssh的登陆用户名。

  第五步:设置空闲时间。

  最后,还需要设置一个会话在断开前的空闲时间。这跟屏幕保护类似。有时候你可能有其他的事情,需要离开SSH客户端一段时间。但是,此时你人已经离开了,但是SSH会话没有中断掉。若此时有人利用你离开的这段时间,搞破坏动作,那该怎么办呢?

  所以,我们需要像设置屏幕保护一样,给SSH会话设置一个最大的空闲时间。当超过这个时间后,SSH服务器会自动中断这个会话,从而保障SSH服务器的安全。此时,我们可以利用ssh tineout命令来设置这个最大空闲时间。其单位是分。默认情况下,其最大的空闲时间为5分钟。

  在客户端上,一般不需要进行额外的配置。只是在客户端选择上,要考虑兼容性问题。即你在服务器上若选择的是SSH1版本的话,则客户端也必须是SSH1版本的。若服务器端是SSH2的,则客户端也要选择ssh2版本的。

若需要管理多台SSH服务器的话,有两种便捷的方式。一是通过上面的“安全密钥认证方式”。如此的话,只需要一个帐户与口令,就可以对所有的SSH服务进行管理。二是在SSH客户端上可以保存相关的配置。当管理员需要访问某台SSh服务器的时候,只需要在客户端上进行选择,而不用重复的输入服务器端的配置,如IP地址与端口等等。 

责任编辑:春晓 来源: 中国IT实验室
相关推荐

2021-11-04 08:16:50

MySQL SQL 语句数据库

2019-06-19 08:30:47

网络协议IPTCP

2009-12-31 10:59:22

ADSL技术原理

2023-01-06 09:40:20

项目性能

2020-06-08 10:50:58

前端TypeScript代码

2021-05-26 16:12:20

区块链加密货币比特币

2022-06-28 07:31:11

哨兵模式redis

2022-09-23 08:32:53

微服务架构服务

2022-07-06 08:17:50

C 语言函数选型

2019-05-20 07:37:00

TCPIP网络协议

2018-01-17 22:36:46

区块链数字货币比特币

2021-05-25 09:50:01

GitLinux命令

2018-03-11 15:11:38

物联网数据物联网数据

2021-05-30 19:02:59

变量对象上下文

2018-03-05 08:35:12

物联网互联网网络技术

2021-05-13 13:20:00

Git命令Linux

2018-03-29 06:40:26

物联网

2018-03-11 14:57:07

物联网组网无线通信

2023-08-03 16:02:24

Objectwaitnotify

2019-08-27 09:20:35

微服务架构组件
点赞
收藏

51CTO技术栈公众号