SSH (Secure Shell)详解



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

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

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

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

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

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

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



定义

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

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

密钥管理

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

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

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

用法

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

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

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

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

历史和发展

版本1.x 

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

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

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

版本2.x 

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

版本1.99 

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

OpenSSH和OSSH 

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

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

用途

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

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

  • 要登录到远程主机上的shell(替换Telnetrlogin
  • 为了在远程主机上执行单个命令(替换rsh
  • 为了设置自动(无密码)登录到远程服务器(例如,使用OpenSSH 
  • 安全的文件传输
  • 结合rsync备份,有效且安全地复制和镜像文件
  • 转发隧道的端口(不要与混淆VPN,其路由不同网络之间的数据包,或 2个广播域到一个)。
  • 用作完整的加密VPN。请注意,只有OpenSSH服务器和客户端支持此功能。
  • 对于从远程主机转发X(可能通过多个中间主机)
  • 用于通过与支持SOCKS协议的 SSH客户端的加密代理连接来浏览网页
  • 使用SSHFS将本地计算机上的目录作为文件系统安全地挂载到远程服务器
  • 用于通过上述一种或多种机制自动远程监控和管理服务器。
  • 用于支持SSH的移动或嵌入式设备上的开发。

文件传输协议

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

  • 安全拷贝(SCP),通过SSH RCP协议发展而来
  • rsync,旨在比SCP更有效
  • SSH文件传输协议(SFTP),一种安全的FTP替代品(不要与SSHFTPS上的FTP混淆
  • 1998年发布的通过shell协议传输的文件(又名FISH),通过SSH Unix shell命令演变而来
  • 快速和安全协议(FASP),又名Aspera,使用SSH进行控制,使用UDP端口进行数据传输。

建筑

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

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

  • 传输层(RFC 4253)。该层处理初始密钥交换以及服务器认证,并设置加密,压缩和完整性验证。它向上层公开了一个用于发送和接收每个大小最多为32,768字节的明文数据包的接口(实现中可以允许使用更多的接口)。传输层还安排密钥重新交换,通常在1 GB数据传输后或1小时后(以先发生者为准)。
  • 所述用户认证层(RFC 4252)。该层处理客户端认证并提供多种认证方法。身份验证是由客户端驱动的:当系统提示您输入密码时,可能是SSH客户端提示,而不是服务器。服务器仅响应客户端的身份验证请求。广泛使用的用户认证方法包括以下内容:
    • 密码:一种简单密码验证的方法,包括允许更改密码的设施。并非所有的程序都使用这种方法
    • publickey基于公共密钥的身份验证方法,通常至少支持DSARSA密钥对,其他实现也支持X.509证书。
    • 键盘交互RFC 4256):一种通用的方法,其中服务器发送一个或多个提示输入信息,客户端显示它们并发回用户键入的响应。用于提供一次性密码认证,如S / KeySecurIDPAM是底层的主机认证提供者时,由某些OpenSSH配置使用,以有效地提供密码认证,有时导致无法使用仅支持普通密码认证方法的客户端登录
    • GSSAPI身份验证方法,它提供了一种可扩展的方案,可使用Kerberos 5NTLM等外部机制执行SSH身份验证,为SSH会话提供单一登录功能。这些方法通常通过用于组织的商业SSH实现来实现,但OpenSSH确实有一个可用的GSSAPI实现。
  • 连接层(RFC 4254)。该层定义了提供SSH服务的频道,频道请求和全局请求的概念。一个SSH连接可以同时托管多个通道,每个通道都可以双向传输数据。通道请求用于中继通道特定的带外数据,例如,更改的终端窗口大小或服务器端进程的退出代码。SSH客户端请求使用全局请求转发的服务器端端口。标准渠道类型包括:
    • 外壳为端子壳,SFTP和exec请求(包括SCP转移)
    • direct-tcpip用于客户端到服务器的转发连接
    • forwarded-tcpip用于服务器到客户端的转发连接
  • SSHFP DNS记录(RFC 4255)规定,才能在验证主机的真实性,以帮助主机公钥指纹。

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

增强功能

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

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

转自**百科

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449714.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2021-08-12 画蜡烛线

画蜡烛线 pip install https://github.com/matplotlib/mpl_finance/archive/master.zip from mpl_finance import candlestick_ochl import matplotlib.pyplot as plt from matplotlib.pylab import date2num# 先画日K线 fig, axes plt.subplots(nrows1, ncols1, figsize(20, …

通达信获取数据

#python第三方库pytdx获取 from pytdx.hq import TdxHq_API api TdxHq_API() # 数据获取接口一般返回list结构,如果需要转化为pandas Dataframe接口,可以使用 api.to_df 进行转化 with api.connect(119.147.212.81, 7709): # 返回普通list data …

股票数据相关性分析

导入相关包 import pandas as pd import numpy as np import matplotlib.pyplot as plt from matplotlib.collections import LineCollection import akshare as ak from sklearn import cluster, covariance, manifold %matplotlib inline #Jupyter Notebook显示图形专用 plt…

分享一个辅助分析内存泄漏的脚本

最近给系统做了一点优化,前几天去查看系统监控,想看看上线前后cpu使用率曲线变化情况。查看的时候意外发现上线前后内存占用相差不少,20%以上。 本来我没怎么在意这个问题,因为我们系统会在运行过程中缓存部分数据内容。但客户觉得…

专访刘伟:软件开发人员的内功修炼之道

摘要:数学修养对软件开发之路起着什么作用?码农如何修炼自己的内功并成长为优秀的软件开发员?带着相关思考,社区之星第10期采访了中南大学副教授——刘伟。他对数学修养、设计模式、软件架构和重构方面的独特见解,相信…

地址解析协议 (ARP) 是什么

地址解析协议 (ARP) 是通过解析网路层地址来找寻数据链路层地址的一个在网络协议包中极其重要的网络传输协议。 ARP是通过网络地址(例:IPv4)来定位MAC地址 (也称为乙太地址)。 ARP已经在很多网路层和数据链接层之间得以实现,包括IPv4,Chaosn…

04.React事件 方法、 React定义方法的几种方式 获取数据 改变数据 执行方法传值...

2019独角兽企业重金招聘Python工程师标准>>> 一.基本用法 在以类继承的方式定义的组件中,为了能方便地调用当前组件的其他成员方法或属性(如:this.state),通常需要将事件处理函数运行时的 this 指向当前组件…

代码之美——Doom3源代码赏析

摘要:Dyad作者、资深C工程师Shawn McGrathz在空闲时翻看了Doom3的源代码,发出了这样的惊叹:“这是我见过的最整洁、最优美的代码!”“Doom 3的源代码让我对那些优秀的程序员刮目相看。”因此有了本文。 背景介绍: Doom…

文件基本处理

1 打开文件,将文件句柄赋值给一个变量 2 拿句柄对文件进行操作 3 关闭文件 将一个文件第一行写道另外一个文件 f open("test","r",encoding"utf-8") # open找的是系统的编码 x f.readlines() f.close() f1 open("test1"…

代码审查:程序员内炼之道

摘要:“关注并弄清楚桥梁修建细节,否则你建起来的桥梁有可能坍塌。”代码审查更重要的是一种技术分享或者代码共享。程序员如何提升自我修炼之道,欢迎来支招。 代码审查更重要的是一种技术分享或者代码共享。在审查过程中,通过被…

排序代码(python,c++) 及 基本算法复杂度

0.导语 本节为手撕代码系列之第一弹,主要来手撕排序算法,主要包括以下几大排序算法: 直接插入排序 冒泡排序 选择排序 快速排序 希尔排序 堆排序 归并排序 1.直接插入排序 【算法思想】 每一步将一个待排序的记录,插入到前面…

TCP/IP四层模型与OSI参考模型

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 TCP/IP四层模型: 1.链路层(数据链路层/网络接口层):包括操作系统中的设备驱动程序、计算…

还驾驭不了4核? 别人已模拟出百万核心上的并行

摘要:不管是台式机还是笔记本,四核双核都已经不是新鲜的事了。计算机领域的你可能已经认识到了给电脑选配4核的处理器完全是一种浪费,因为大多数的程序都不支持多核心的并行处理。然而斯坦福的计算机科学家最近公布,他们已经模拟出…

Django内置权限扩展案例

当Django的内置权限无法满足需求的时候就自己扩展吧~ 背景介绍 overmind项目使用了Django内置的权限系统,Django内置权限系统基于model层做控制,新的model创建后会默认新建三个权限,分别为:add、change、delete,如果给…

Flutter Mac iOS 环境配置

官方文档:flutter.io/docs/get-st… 1.需要的命令行工具 bash curl git 2.x mkdir rm unzip which 2.SDK下载地址 flutter_macos_v1.0.0-stable.zip storage.googleapis.com/flutter_inf… 3.解压Flutter SDK cd ~/Flutter/SDK $ unzip ~/Downloads/flutter_macos_v…

IntelliJ IDEA中新建JAVA WEB项目、maven项目

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 在IntelliJ IDEA 中新建一个Web应用项目。 1、 在主界面顶部菜单栏依次“File”-"New"-"Project..." 2、在对话框中…

S/4HANA业务角色概览之订单到收款篇

2019独角兽企业重金招聘Python工程师标准>>> 大家好我叫Sean Zhang,中文名张正永。目前在S/4HANA产品研发部门任职产品经理,而这一阶段要从2017年算起,而在那之前接触更多还是技术类的,比如做过iOS、HANA、ABAP、UI5等…

ItelliJ IDEA开发工具使用—创建一个web项目

转自:https://blog.csdn.net/wangyang1354/article/details/50452806概念需要明确一下IDEA中的项目(project)与eclipse中的项目(project)是不同的概念,IDEA的project 相当于之前eclipse的workspace,IDEA的M…

极客无极限 一行HTML5代码引发的创意大爆炸

摘要:一行HTML5代码能做什么?国外开发者Jose Jesus Perez Aguinaga写了一行HTML5代码的文本编辑器。这件事在分享到Code Wall、Hacker News之后,引起了众多开发者的注意,纷纷发表了自己的创意。 这是最初的HTML5代码,它…

DOCKER windows 7 详细安装教程

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 DOCKER windows安装 DOCKER windows安装 1.下载程序包2. 设置环境变量3. 启动DOCKERT4. 分析start.sh5. 利用SSH工具管理6. 下载镜像 6.1…