SSH
先搬 Wikipedia:
安全外壳协议 (SSH) 是一种加密网络协议,用于在不安全的网络上安全地操作网络服务。 它最值得注意的应用是远程登录和命令行执行。
SSH 应用程序基于客户端-服务器体系结构,将 SSH 客户端实例与 SSH 服务器连接起来。SSH 作为一个分层协议套件运行,由三个主要的分层组件组成:传输层提供服务器身份验证,机密性和完整性;用户身份验证协议验证用户到服务器;并且连接协议将加密隧道多路复用到多个逻辑通信通道中。
SSH 是在类 Unix 操作系统上设计的,作为 Telnet 和不安全的远程 Unix shell 协议的替代品,例如 Berkeley Remote Shell(rsh)以及相关的 rlogin 和 rexec 协议,它们都使用不安全的,明文的身份验证令牌传输。
SSH 最初由芬兰计算机科学家 Tatu Ylönen 于 1995 年设计。协议套件的后续开发在几个开发人员组中进行,产生了几种实现变体。该协议规范区分了两个主要版本,称为 SSH-1 和 SSH-2 。最常实现的软件堆栈是 OpenSSH,由 OpenBSD 开发人员于 1999 年作为开源软件发布。实现适用于常用的所有类型的操作系统,包括嵌入式系统。
SSH 使用公钥加密对远程计算机进行身份验证,并允许它在必要时对用户进行身份验证。 SSH 可用于多种方法。以最简单的方式,通信通道的两端使用自动生成的公钥-私钥对对网络连接进行加密,然后使用密码对用户进行身份验证。
当用户手动生成公钥-私钥对时,身份验证实质上是在创建密钥对时执行的,然后可以在没有密码提示的情况下自动打开会话。在这种情况下,公钥放置在所有计算机上,这些计算机上必须允许访问匹配私钥的所有者,该所有者保持私有。虽然身份验证基于私钥,但在身份验证期间,密钥永远不会通过网络传输。SSH 仅验证提供公钥的同一个人是否也拥有匹配的私钥。
在所有版本的 SSH 中,在接受未知公钥为有效之前,验证未知公钥(即将公钥与身份相关联)非常重要。未经验证接受攻击者的公钥将授权未经授权的攻击者为有效用户。
SSH通常用于登录到远程计算机并执行命令,但它也支持隧道,转发TCP端口和X11连接;它可以使用关联的 SSH 文件传输 (SFTP) 或安全复制 (SCP) 协议传输文件。 SSH 使用客户端-服务器模型。
SSH 客户端程序通常用于建立与接受远程连接的 SSH 守护程序的连接。两者都常见于大多数现代操作系统,包括macOS,Linux的大多数发行版,OpenBSD,FreeBSD,NetBSD,Solaris和OpenVMS。值得注意的是,Windows 10 版本 1709 之前的 Windows 版本默认情况下不包括 SSH。专有的、免费软件和开源的(例如PuTTY,和OpenSSH的版本,它是Cygwin的一部分)版本存在不同复杂程度和完整性的版本。类 UNIX 系统的文件管理器(例如 Konqueror)可以使用 FISH 协议来提供具有拖放功能的拆分窗格 GUI。开源Windows程序WinSCP使用PuTTY作为后端提供了类似的文件管理(同步,复制,远程删除)功能。WinSCP和PuTTY都可以打包在USB驱动器上运行,而无需在客户端计算机上安装。在 Windows 中设置 SSH 服务器通常涉及在“设置”应用中启用功能。在 Windows 10 版本 1709 中,可以使用 OpenSSH 的官方 Win32 端口。
SSH在云计算中对于解决连接问题非常重要,避免了直接在互联网上公开基于云的虚拟机的安全问题。SSH 隧道可以通过 Internet 提供安全路径,通过防火墙到达虚拟机。
IANA 已为此协议分配了 TCP 端口 22、UDP 端口 22 和 SCTP 端口 22。早在2001年,IANA就将SSH服务器的标准TCP端口22列为知名端口之一。SSH也可以使用SCTP而不是TCP作为面向连接的传输层协议来运行。
SSH是一种协议,可用于跨许多平台的许多应用程序,包括大多数Unix变体(Linux,包括Apple的macOS和Solaris在内的BSD)以及Microsoft Windows。下面的某些应用程序可能需要仅可用或与特定 SSH 客户端或服务器兼容的功能。例如,使用SSH协议实现VPN是可能的,但目前只有OpenSSH服务器和客户端实现。
- 用于登录到远程主机上的 shell(替换 Telnet 和 rlogin)
- 用于在远程主机上执行单个命令(替换 rsh)
- 用于设置自动(无密码)登录到远程服务器(例如,使用OpenSSH[24])
- 与 rsync 结合使用,可高效、安全地备份、复制和镜像文件
- 用于转发端口
- 用于隧道(不要与VPN混淆,VPN在不同网络之间路由数据包,或将两个广播域桥接到一个网络中)。
- 用作成熟的加密VPN。请注意,只有 OpenSSH 服务器和客户端支持此功能。
- 用于从远程主机转发 X(可通过多个中间主机)
- 用于通过与支持 SOCKS 协议的 SSH 客户端的加密代理连接浏览 Web。
- 用于使用 SSHFS 将远程服务器上的目录作为文件系统安全地挂载到本地计算机上。
- 用于通过上面讨论的一种或多种机制自动远程监视和管理服务器。
- 用于在支持 SSH 的移动或嵌入式设备上进行开发。
- 用于保护文件传输协议。