SSH (Secure Shell)详解

前端之家收集整理的这篇文章主要介绍了SSH (Secure Shell)详解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。



Secure Shell@H_404_7@@H_404_7@SSH@H_404_7@)是一种@H_404_7@加密@H_404_7@网络协议,用于在不安全的网络上安全地运行网络服务。@H_404_7@

SSH通过@H_404_7@客户端 - 服务器体系结构中@H_404_7@的不安全网络@H_404_7@提供@H_404_7@@H_404_7@安全通道,将@H_404_7@SSH客户端应用程序与@H_404_7@SSH服务器相连接。@H_404_7@@H_404_7@

常见的应用程序包括远程@H_404_7@命令行登录和远程命令执行,但任何@H_404_7@网络服务都可以通过SSH进行安全保护。@H_404_7@@H_404_7@

协议规范区分了两个主要版本,分别称为SSH-1和SSH-2。@H_404_7@@H_404_7@最着名的示例应用程序是用户远程@H_404_7@登录计算机系统。@H_404_7@

@H_404_7@

该协议最明显的应用是在@H_404_7@类似Unix的操作系统@H_404_7@上@H_404_7@访问@H_404_7@@H_404_7@shell帐户,但它在@H_404_7@Windows上也@H_404_7@有一些有限的用途@H_404_7@。@H_404_7@在2015年,微软宣布他们将在未来的版本中包含对SSH的本地支持。@H_404_7@@H_404_7@

SSH被设计为替代@H_404_7@Telnet和@H_404_7@不安全的远程@H_404_7@shell协议,如Berkeley@H_404_7@rlogin,@H_404_7@rsh和@H_404_7@rexec协议。@H_404_7@这些协议@H_404_7@以@H_404_7@明文形式发送信息,特别是@H_404_7@@H_404_7@密码,@H_404_7@使它们易于使用@H_404_7@数据包分析进行截取和披露@H_404_7@。@H_404_7@SSH使用@H_404_7@的@H_404_7@加密旨在通过不安全的网络(如@H_404_7@Internet)提供数据的机密性和完整性@H_404_7@,尽管@H_404_7@Edward Snowden泄漏的@H_404_7@文件表明@H_404_7@@H_404_7@@H_404_7@@H_404_7@@H_404_7@@H_404_7@@H_404_7@@H_404_7@国家安全局有时可以解密SSH,允许他们读取SSH会话的内容。@H_404_7@

2017年7月6日,政府透明度组织@H_404_7@维基解密确认,美国@H_404_7@中央情报局开发的工具可以安装在运行@H_404_7@MicrosoftWindows或@H_404_7@GNU / Linux操作系统的计算机上,以拦截受害系统上SSH客户端启动的SSH连接。@H_404_7@



@H_404_7@

定义@H_404_7@

如果需要,@H_404_7@SSH使用@H_404_7@@H_404_7@公钥加密来@H_404_7@验证远程计算机并允许它对用户进行身份验证。@H_404_7@[有几种使用SSH的方式;@H_404_7@一种是使用自动生成的公私密钥对来简单地加密网络连接,然后使用@H_404_7@@H_404_7@密码认证登录。@H_404_7@

另一种方法是使用手动生成的公私密钥对来执行认证,允许用户或程序登录而不必指定密码。@H_404_7@在这种情况下,任何人都可以生成一对不同的密钥(公共和私人)。@H_404_7@公钥被放置在所有必须允许访问匹配私钥所有者的计算机上(所有者保密私钥)。@H_404_7@虽然身份验证基于私钥,但身份验证过程中永远不会通过网络传输密钥本身。@H_404_7@SSH只验证提供公钥的同一个人是否拥有匹配的私钥。@H_404_7@在SSH的所有版本中它来验证未知是重要的@H_404_7@@H_404_7@公共密钥,即@H_404_7@关联与身份的公共密钥,然后再接受它们为有效的。@H_404_7@在未经验证的情况下接受攻击者的公钥将授权未经授权的攻击者作为有效用户。@H_404_7@@H_404_7@

密钥管理@H_404_7@

在@H_404_7@类Unix系统上,授权公钥列表通常存储在允许远程登录用户的主目录中,文件为〜/ .ssh / authorized_keys。@H_404_7@这个文件只有在除了所有者和根以外的任何东西都不能被写入的情况下,才受到SSH的尊重。@H_404_7@当远程端存在公钥并且本地端存在匹配的私钥时,不再需要输入密码(某些软件(如@H_404_7@@H_404_7@消息传递接口(MPI)堆栈)可能需要此无密码访问权限才能运行正确)。@H_404_7@但是,为了增加安全性,可以使用密码锁定私钥本身。@H_404_7@@H_404_7@

私钥也可以在标准位置查找,其完整路径可以指定为命令行设置(@H_404_7@ssh@H_404_7@选项@H_404_7@@H_404_7@-i)。@H_404_7@在@H_404_7@@H_404_7@SSH-凯基工具产生公钥和私钥,总是成对出现。@H_404_7@

SSH还支持通过自动生成的密钥加密的基于密码的身份验证。@H_404_7@在这种情况下,攻击者可以模仿合法的服务器端,请求密码并获取它(@H_404_7@@H_404_7@中间人攻击)。@H_404_7@但是,这只有在双方之前从未认证过的情况下才有可能,因为SSH记住了服务器端以前使用的密钥。@H_404_7@SSH客户端在接受新的,以前未知的服务器的密钥之前发出警告。@H_404_7@密码认证可以被禁用。@H_404_7@@H_404_7@

用法@H_404_7@

SSH通常用于登录远程机器并执行命令,但它也支持@H_404_7@隧道,@H_404_7@转发TCP端口和@H_404_7@X11连接;@H_404_7@它可以使用关联的@H_404_7@@H_404_7@SSH文件传输(SFTP)或@H_404_7@安全副本(SCP)协议@H_404_7@传输文件@H_404_7@。@H_404_7@@H_404_7@[2]SSH使用@H_404_7@客户端 - 服务器模型。@H_404_7@

在@H_404_7@标准TCP端口22已被分配用于接触SSH服务器。@H_404_7@

SSH@H_404_7@客户端程序通常用于建立到@H_404_7@接受远程连接@H_404_7@的SSH@H_404_7@@H_404_7@守护程序的连接。@H_404_7@两者通常都存在于大多数现代@H_404_7@@H_404_7@操作系统中包括@H_404_7@macOS,大多数@H_404_7@Linux,@H_404_7@OpenBSD,@H_404_7@FreeBSD,@H_404_7@NetBSD,@H_404_7@Solaris和@H_404_7@OpenVMS。@H_404_7@值得注意的是,@H_404_7@@H_404_7@Windows是少数几个默认不包含SSH的现代桌面/服务器操作系统之一。@H_404_7@专有,@H_404_7@免费软件和@H_404_7@开源(例如@H_404_7@PuTTY,@H_404_7@和作为@H_404_7@Cygwin一部分@H_404_7@的@H_404_7@@H_404_7@OpenSSH版本)存在各种复杂性和完整性的版本。@H_404_7@本地Linux文件管理器(例如@H_404_7@Konqueror)可以使用@H_404_7@FISH协议通过拖放功能提供分割窗格GUI。@H_404_7@开源Windows程序@H_404_7@WinSCP使用PuTTY作为后端提供了类似的文件管理(同步,复制,远程删除功能。@H_404_7@WinSCP@H_404_7@和PuTTY@H_404_7@都可以直接从USB驱动器运行,而无需在客户机上安装。@H_404_7@在Windows中设置SSH服务器通常需要安装(例如,通过安装Cygwin@H_404_7@@H_404_7@@H_404_7@@H_404_7@@H_404_7@@H_404_7@@H_404_7@@H_404_7@[)。@H_404_7@在@H_404_7@@H_404_7@Windows 10版本1709中,可以使用官方的OpenSSH Win32端口。@H_404_7@

SSH在云计算中非常重要,可以解决连接问题,避免直接在Internet上暴露基于云的虚拟机的安全问题。@H_404_7@SSH隧道可以通过互联网提供安全路径,通过防火墙到虚拟机。@H_404_7@@H_404_7@

历史和发展@H_404_7@

版本1.x@H_404_7@

1995年,@H_404_7@芬兰赫尔辛基科技大学的研究员@H_404_7@@H_404_7@TatuYlönen设计了第一个版本的协议(现在称为@H_404_7@SSH-1@H_404_7@),@H_404_7@并在他的@H_404_7@大学网络上发起@H_404_7@了密码@H_404_7@嗅探攻击@H_404_7@。@H_404_7@SSH的目标是取代早期的@H_404_7@rlogin,@H_404_7@TELNET,ftp@H_404_7@和@H_404_7@rsh协议,它们不提供强认证,也不保证机密性。@H_404_7@Ylönen将其实​​施作为@H_404_7@免费软件发布@H_404_7@@H_404_7@@H_404_7@@H_404_7@@H_404_7@@H_404_7@@H_404_7@@H_404_7@@H_404_7@@H_404_7@@H_404_7@@H_404_7@在1995年7月,该工具迅速流行起来。@H_404_7@到1995年底,SSH用户群已增至50个国家的20,000名用户。@H_404_7@@H_404_7@

1995年12月,Ylönen成立了@H_404_7@SSH通信安全公司,以推广和开发SSH。@H_404_7@原始版本的SSH软件使用了各种@H_404_7@@H_404_7@免费软件,例如@H_404_7@GNU libgmp,但由SSH Communications Security发布的更新版本演变为日益@H_404_7@专有的软件。@H_404_7@

据估计,到2000年,用户数量已增长到200万。@H_404_7@

版本2.x@H_404_7@

“Secsh”是@H_404_7@负责SSH协议第2版的IETF工作组@H_404_7@的官方@H_404_7@@H_404_7@Internet工程任务组(IETF)名称。@H_404_7@2006年,该协议的修订版本@H_404_7@SSH-2被采纳为标准。@H_404_7@该版本与SSH-1不兼容。@H_404_7@SSH-2通过SSH-1提供安全性和功能改进。@H_404_7@例如,通过@H_404_7@@H_404_7@Diffie-Hellman密钥交换和@H_404_7@通过@H_404_7@消息认证码进行强大的@H_404_7@@H_404_7@完整性检查@H_404_7@,可以提供更好的安全性@H_404_7@。@H_404_7@SSH-2的新功能包括@H_404_7@通过单个SSH连接@H_404_7@运行任意数量的@H_404_7@shell会话。@H_404_7@@H_404_7@由于SSH-2在SSH-1上的优越性和普及性,一些实现例如@H_404_7@Lsh和@H_404_7@Dropbear支持SSH-2协议。@H_404_7@

版本1.99@H_404_7@

在2006年1月,在版本2.1建立之后,@H_404_7@RFC 4253指出,支持2.0和以前版本的SSH的SSH服务器应该将它的版本识别为1.99。@H_404_7@这不是一个真正的版本,而是一种识别@H_404_7@向后兼容性方法@H_404_7@。@H_404_7@@H_404_7@

@H_404_7@OpenSSH和OSSH@H_404_7@@H_404_7@@H_404_7@

在1999年,开发人员想要一个免费的软件版本,然后回到原来的1.2.12版本的原始SSH程序中,该程序是在@H_404_7@开源许可证@H_404_7@下最后发布的@H_404_7@。@H_404_7@BjörnGrönvall的OSSH随后从该代码库开发而来。@H_404_7@此后不久,@H_404_7@@H_404_7@OpenBSD的开发@H_404_7@分叉Grönvall的代码,并在其上做了广泛的工作,创造@H_404_7@OpenSSH的,它随2.6版本的OpenBSD。@H_404_7@从这个版本开始,一个“可移植性”分支形成了将OpenSSH移植到其他操作系统。@H_404_7@@H_404_7@

截至2005年@H_404_7@,@H_404_7@OpenSSH是最受欢迎的SSH实现中的一种,在大量操作系统中默认使用。@H_404_7@OSSH同时已经过时。@H_404_7@@H_404_7@OpenSSH继续保持并支持SSH-2协议,已经从OpenSSH 7.6版本的代码库中删除了对SSH-1的支持。@H_404_7@

用途@H_404_7@

通过SSH@H_404_7@隧道@H_404_7@传输@H_404_7@@H_404_7@ X11 应用程序的@H_404_7@示例@H_404_7@用户'josh'已经从本地机器'foofighter'连接到远程机器'tengwar'以运行@H_404_7@@H_404_7@ xeyes 。@H_404_7@
使用@H_404_7@运行在@H_404_7@Windows上的@H_404_7@PuTTY通过SSH@H_404_7@登录到@H_404_7@@H_404_7@ OpenWrt 。@H_404_7@ @H_404_7@ @H_404_7@

SSH是一种协议,可用于许多平台上的许多应用程序,包括大多数@H_404_7@Unix变体(@H_404_7@Linux,@H_404_7@BSD包括@H_404_7@Apple的macOS和@H_404_7@Solaris)以及@H_404_7@Microsoft Windows。@H_404_7@下面的一些应用程序可能需要仅与特定SSH客户端或服务器兼容的功能。@H_404_7@例如,使用SSH协议来实现@H_404_7@@H_404_7@VPN是可能的,但目前只有@H_404_7@OpenSSH服务器和客户端实现。@H_404_7@

文件传输协议@H_404_7@

Secure Shell协议用于多种文件传输机制。@H_404_7@

@H_404_7@建筑@H_404_7@@H_404_7@@H_404_7@

SSH-2二进制包的示意图。@H_404_7@

SSH-2协议具有内部架构(在@H_404_7@RFC 4251中定义@H_404_7@),具有良好分离的层,即:@H_404_7@@H_404_7@

  • 在@H_404_7@传输层(@H_404_7@RFC 4253)。@H_404_7@该层处理初始密钥交换以及服务器认证,并设置加密,压缩和完整性验证。@H_404_7@它向上层公开了一个用于发送和接收每个大小最多为32,768字节的明文数据包的接口(实现中可以允许使用更多的接口)。@H_404_7@传输层还安排密钥重新交换,通常在1 GB数据传输后或1小时后(以先发生者为准)。@H_404_7@@H_404_7@
  • 所述@H_404_7@用户认证层(@H_404_7@RFC 4252)。@H_404_7@该层处理客户端认证并提供多种认证方法。@H_404_7@身份验证是由@H_404_7@@H_404_7@客户端驱动的:当系统提示您输入密码时,可能是SSH客户端提示,而不是服务器。@H_404_7@服务器仅响应客户端的身份验证请求。@H_404_7@广泛使用的用户认证方法包括以下内容:@H_404_7@@H_404_7@
  • 的@H_404_7@连接层(@H_404_7@RFC 4254)。@H_404_7@该层定义了提供SSH服务的频道,频道请求和全局请求的概念。@H_404_7@一个SSH连接可以同时托管多个通道,每个通道都可以双向传输数据。@H_404_7@通道请求用于中继通道特定的带外数据,例如,更改的终端窗口大小或服务器端进程的退出代码。@H_404_7@SSH客户端请求使用全局请求转发的服务器端端口。@H_404_7@标准渠道类型包括:@H_404_7@@H_404_7@
    • 外壳为端子壳,SFTP和exec请求(包括SCP转移)@H_404_7@
    • direct-tcpip用于客户端到服务器的转发连接@H_404_7@
    • forwarded-tcpip用于服务器到客户端的转发连接@H_404_7@
  • 该@H_404_7@SSHFPDNS记录(@H_404_7@RFC 4255)规定,才能在验证主机的真实性,以帮助主机公钥指纹。@H_404_7@

这种开放式体系结构提供了相当大的灵活性,允许将SSH用于超出安全shell的各种用途。@H_404_7@传输层的功能本身就与@H_404_7@@H_404_7@传输层安全(TLS)@H_404_7@相当@H_404_7@;@H_404_7@用户认证层具有高度可扩展的自定义认证方法;@H_404_7@并且连接层提供了将多个辅助会话复用到单个SSH连接的能力,这一功能与@H_404_7@@H_404_7@BEEP相当,@H_404_7@并且在TLS中不可用。@H_404_7@@H_404_7@

增强功能@H_404_7@

这些旨在提高SSH产品的性能:@H_404_7@

  • SSH-over-@H_404_7@SCTP支持SCTP而不是TCP作为面向连接的传输层协议@H_404_7@
  • ECDSA支持椭圆曲线DSA而不是DSA或RSA进行签名。@H_404_7@
  • ECDH支持椭圆曲线Diffie-Hellman,而不是简单的Diffie-Hellman来进行加密密钥交换。@H_404_7@
  • UMAC:对UMAC而不是支持@H_404_7@HMAC的@H_404_7@MAC/完整性。@H_404_7@
转自**百科

猜你在找的Bash相关文章