7.2 任务一:建立SSH服务(田钧)
7.2.1 SSH协议简介
SSH的英文全称为Secure Shell,是IETF(Internet Engineering Task Force)的Network Working Group所制定的一族协议,其目的是要在非安全网络上提供安全的远程登录和其他安全网络服务。可以简单理解为:Rlogin和Telnet等的替代方案。
SSH 协议在预设状态中提供两个服务器功能:
类似telnet的远程联机使用 shell 的服务器,即ssh;
类似FTP服务的sftp-server,提供更安全的 FTP 服务。
1. SSH基本框架
SSH协议框架中最主要的部分是三个协议:传输层协议、用户认证协议和连接协议。同时SSH协议框架中还为许多高层的网络安全应用协议提供扩展的支持。它们之间的层次关系可以用如下图7-1来表示:
图7-1 SSH协议的层次结构示意图
在SSH的协议框架中,传输层协议(The Transport Layer Protocol)提供服务器认证,数据机密性,信息完整性 等的支持;用户认证协议(The User Authentication Protocol) 则为服务器提供客户端的身份鉴别;连接协议(The Connection Protocol) 将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用;各种高层应用协议可以相对地独立于SSH基本体系之外,并依靠这个基本框架,通过连 接协议使用SSH的安全机制。
SSH的安全验证是如何工作的
  从客户端来看,SSH提供两种级别的安全验证。
第一种级别(基于口令的安全验证)
只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密, 但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器, 也就是受到“中间人”这种方式的攻击。
第二种级别(基于密匙的安全验证)
需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。 如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在你在该服务器的家目录下寻你的 公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。 客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。
用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。
第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。 但是整个登录的过程需要的时间稍微较长。
2 SSH数据加密方式
网络封包的加密技术通常由“一对公钥与私钥”(即“Public and Private keys”)进行加密与解密的操作。主机端要传给客户端(client)的数据先由公钥加密,然后才在网络上传输。到达客户端后,再由私钥将加密的资料解密。经过公钥(publick key)加密的数据在传输过程中,由于数据本身经过加密,即使这些数据在途中被截取,要破解这些加密的数据,需要花费好长一段时间。
3. SSH版本
SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。 用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。
SSH protocol version 1
每一部SSH服务器主机都可以用RSA加密方式产生一个1024-bit的RSA Key,这个RSA的加密方式主要用来产生公钥与私钥的演算方法。
version 1的整个联机加密步骤:
当每次SSH daemon(sshd)启动时,产生768-bit的公钥(或称为server key)存放在Server 中;若有客户端的ssh联机需求传送来时,Server将这公钥传给客户端。
此时,客户端比对该公钥的正确性。比对的方法是利用/etc/ssh/ssh_known_hosts或~/.ssh/known_hosts 档案内容。
在客户端接受该768-bit的server key后,客户端随机产生256-bit的私钥(host key),并且以加密方式将server key与host key整合成完整的Key,并将该Key传送给server;
Server与客户端在本次联机中以该1024-bit的Key进行数据的传递。由于客户端每次256-bit的Key是随机取的,因而本次联机与下次联机的Key可能不一样。
SSH protocol version 2
SSH version 1的联机中,Server单纯的接受来自客户端的private key,如果在联机过程中private key被取得后,cracker 就可能在既有的联机当中插入一些攻击码,使得联机发生问题。
为了改进这个缺点,在SSH version 2中,SSH server不再重复产生server key,而是在与客户端建立private key时,利用Diffie-Hellman的演算方式, 共同确认来建立private key,然后将该private key与public key组成一组加解密的金钥。同样,这组金钥也仅是在本次的联机中有效。
透过这个机制可见,由于server/client两者之间共同建立了private key,若private key落入别人手中,由于server端还会确认联机的一致性,使cracker没有机会插入有问题的攻击码。即ssh version 2 是比较安全的。
7.2.2 SSH常用操作
1. 启动 SSH 服务
Linux 系统中,预设含有SSH的所有需要的套件,包含可以产生密码等协议的OpenSSL套件
OpenSSH套件,直接启动即可使用。
以SSH daemon(简称 sshd)手动启动的步骤如下:
[root@localhost ~]# /etc/init.d/sshd restart
[root@localhost ~]# netstat -tlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address  Foreign Address  State  PID/Program name
tcp        0      0 *:ssh          *:*              LISTEN  24
启动后,利用netstat查阅sshd 程序是否正确的在LISTEN即可。这时,SSH服务器设定值均是系统默认值,能否仅用较安全的version 2 ,需要进一步的设定。
如果想在开机即启动SSH,用chkconfig设定开机启动即可。
[root@localhost ~]#chkconfig sshd on
2. ssh 客户端联机
⑴Linux Client: ssh
SSH在客户端使用ssh指令,该指令可以指定联机的版本 (version1或version2), 还可以指定非正规的ssh port(正规ssh port为22)。
一般的用法:
①直接登入到对方主机:
[root@localhost ~]# ssh account@hostname
# 范例:
# 连接到我们自己本机上面的 ssh 服务
telnet协议全称[root@localhost ~]# ssh dmtsai@localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
RSA key fingerprint is f8:ae:67:0e:f0:e0:3e:bb:d9:88:1e:c9:2e:62:22:72.
Are you sure you want to continue connecting (yes/no)? yes

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。