管理员时常需要同时管理通过网络相连的分散于各处的多台主机,而类UNIX操作系统最大的特色就是可以进行远程登录并进行管理。UNIX 系统很早就有用于实现远程登录、远程命令执行、远程文件传输的功能(r族命令:rlogin、rsh、rcp),但遗憾的是它们都不安全。 百科对SSH的解释如下:SSH 的英文全称为Secure Shell,是IETF(Internet Engineering Task Force)的网络工作组(Network Working Group)所制定的协议,SSH 是建立在应用层和传输层基础上的安全协议。SSH目的是要在非安全网络上提供安全的远程登录和其他安全网络服务。SSH(Secure SHell)协议是C/S模式协议,即区分客户端和服务器端。一次成功的 SSH 会话需要两端通力合作来完成。所有使用SSH协议的通信(包括口令),都会被加密传输。 看到这里是否仍然对SSH的概念感到模糊? 简单点:SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。 传统的网络服务程序,如FTP、Pop和Telnet在传输机制和实现原理上是没有考虑安全机制的,其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,别有用心的人通过窃听等网络攻击手段非常容易地就可以截获这些数据、用户帐号和用户口令。而且,这些网络服务程序的简单安全验证方式也有其弱点,那就是很容易受到"中间人"(man-in-the-middle)这种攻击方式的攻击。所谓"中间人"的攻击方式,就是"中间人"冒充真正的服务器接收你的传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被"中间人"一转手做了手脚之后,就会出现很严重的问题。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、Pop、甚至为PPP提供一个安全的"通道"。 再简单点:紧紧抓住一个关键词“安全协议”。 切勿将SSH与SSL混为一谈,看起来就差一个字母实际上远远不止一个字母的区别。 SSH协议体系结构 SSH协议是建立在应用层和传输层基础上的安全协议。SSH协议目前有SSH1(SSH protocol version 1)及SSH2(SSH protocol version 1)两种版本,当然现在的主流是SSH2,因为它提供了比SSH1更安全的数据传输能力。在SSH协议中,常见的密钥加密算法有RSA、DSA及Diffie-Hellman等。SSH1主要是使用RSA的加密技术,而SSH2除了RSA以外,还使用DSA及Diffie-Hellman 等算法。 SSH协议主要由传输层协议、连接协议及用户认证协议三部分组成,共同实现SSH的安全保密机制。 传输层协议(The Transport Layer Protocol):传输层协议提供服务器认证,数据机密性,信息完整性等的支持。 用户认证协议(The User Authentication Protocol):用户认证协议为服务器提供客户端的身份鉴别。 连接协议(The Connection Protocol):连接协议将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用。 同时,SSH协议框架中还为许多高层的网络安全应用协议提供扩展的支持。各种高层应用协议可以相对地独立于SSH基本体系之外,并依靠这个基本框架,通过连接协议使用SSH的安全机制。 那么SSH 到底是如何保证安全的呢? 首先分为两大步,第一步是客户端和服务端建立连接,最终生成双方都一致的Session Key。第二步使用Authorized Key进行登录,登录过程使用Public/Private Key验证身份。连接建立完成后,在通讯过程中使用Session Key对信息进行加密解密。 也就是以下两个步骤: 1.客户端和服务端建立连接 2.用户身份鉴权 说白了建立连接的过程就是一个基于密钥的安全验证:口令和密钥。 密钥登录:这里的密钥又分为公钥和私钥,也就是上文所说的Public/Private Key。公钥(public key)在服务器端,相当于锁头,私钥(private key)在客户端,相对于公钥来说就是钥匙。 客户端发出请求,服务端发送公钥,客户端的私钥与服务端的公钥经过算法得出值发送给服务端,然后建立联机,这期间服务端不对这个值进行校验,所以其他的客户端有可能冒充进行伪通讯。 连接过程: (客户端有公钥和私钥,一些验证方式只需要客户端有私钥即可) cli发送公钥到ser cli发送连接请求 Ser使用私钥和公钥加密得到字串发送给cli Cli使用私钥解密该字串发给ser Ser校验通过,连接建立