本文主要是介绍浅谈SSH那些事儿,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1 SSH起源
传统的网络服务程序,比如FTP,POP,Telnet,本质上都是不安全的,因为它们在网络上用明文传送数据、用户账号和用户口令,很容易受到中间人攻击方式的攻击,攻击者会冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。
为了满足安全性的需求,IETF的网络工作小组制定了Secure Shell(缩写为SSH),这是一项创建在应用层和传输层基础上的安全协议,为计算机上的Shell提供安全的传输和使用环境。
SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄漏问题。通过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。
2 SSH工作原理
首先需要了解常用的加密方式:
(1) 对称加密(也称为密钥加密)
(2) 非对称加密(也称公钥加密)
首先谈一下什么是对称加密,如图所示,对称加密通俗来说就是客户端和服务端共享同一份密钥,客户端用加密算法将重要信息加密,服务端再用相同的加密算法进行解密。若信息一致,则完成验证。
显然,这种加密方式存在着一定的弊端,服务器需要保存数以万计的密钥文件,一旦泄露将造成巨大的灾难,由此非对称加密方式就应运而生。如下图所示,非对称方式需要两种密钥,公钥只能用于加密,而只有私钥才能用于解密,且私钥只在服务端存在,相对来说传输的安全性得到了有效地提高。
但是即使这样,也不是绝对安全的,如下图所示,也存在着网络攻击的可能。黑客可以在拦截用户的登陆请求,从而获取用户真实的账号密码。
SSH为解决上述问题,采用了以下方案:
- 基于口令的认证
为确保连接安全,客户端第一次连接时会弹出公钥确认信息。
输入yes后会提示以下信息
- 基于公钥认证
由于每次都输入密码验证很麻烦,还派生出一种基于公钥的认证方式,可以免去密码认证。
1.Client将自己的公钥存放在Server上,追加在文件authorized_keys中。
2.Server端接收到Client的连接请求后,会在authorized_keys中匹配到Client的公钥pubKey,并生成随机数R,用Client的公钥对该随机数进行加密得到pubKey®
,然后将加密后信息发送给Client。
3.Client端通过私钥进行解密得到随机数R,然后对随机数R和本次会话的SessionKey利用MD5生成摘要Digest1,发送给Server端。
4.Server端会也会对R和SessionKey利用同样摘要算法生成Digest2。
5.Server端会最后比较Digest1和Digest2是否相同,完成认证过程。
3 总结
SSH给出了优于Telnet的解决方案,并沿用至今,足以显示它的优越性。我们只有每天学一点,多一点,才能进步!
这篇关于浅谈SSH那些事儿的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!