%% # 纲要 > 主干纲要、Hint/线索/路标 # Q&A #### 已明确 #### 待明确 > 当下仍存有的疑惑 **❓<font color="#c0504d"> 有什么问题?</font>** # Buffer ## 闪念 > sudden idea ## 候选资料 > Read it later %% # SSH 协议与 SSL/TLS 协议的区别 - SSH 是==**应用层**==的协议,专为==**远程会话**==和==**文件传输**==(如 SCP 和 SFTP)设计的,建立 **SSH 客户端与 SSH 服务器之间的安全通信**。 - SSL/TLS 是工作**在传输层/应用层之间**的协议,用于**为 "应用层协议" 提供加密/安全数据传输服务**,例如:"HTTPS = HTTP over SSL/TLS"。 <br><br> # Telnet 协议 Telnet 最初用于远程操作网络设备和服务器,是较早的互联网标准之一,**由于安全缺陷,现在在大多数环境中已被安全性更高的 SSH 所取代**。 > [!NOTE] Linux 系统上 `telnet` 命令即是 Telnet 协议的用户接口,可用于远程命令行访问。 SSH 和 Telnet 都是用于**远程访问计算机**的网络协议,但在安全性、用途和技术实现上存在显著差异: - **安全性**: - **SSH 提供了安全的加密连接**,保护传输的数据不被窃听和篡改; - **Telnet 在传输数据时不提供加密**,所有通信内容(包括用户名和密码)都是明文传输,易被截取窥探。 - **功能性**: - **SSH 除了提供安全的远程命令行访问之外,还支持文件传输(如 SCP 和 SFTP)、端口转发、安全隧道等功能**。 - Telnet 只提供基本的远程命令行访问功能。 <br><br> # SSH 协议 SSH(Secure Shell,安全外壳)是一个应用层的网络协议,**通过加密和认证机制提供安全的网络通信**。 基于 SSH 协议的常见应用包括: - **安全的远程登录(远程命令行访问)** - **安全的文件传输** - **SSH 隧道(端口转发)** - **X11 转发** - **SSH 代理** - **代理跳板** 上述功能/应用都**基于 SSH 协议**,依赖于 **SSH 认证信息**(如密码或 SSH 密钥)来建立**连接(SSH 会话)**,通过 SSH 提供的安全会话来**加密传输数据**。 SSH 使用强加密技术,通过对网络数据进行加密和验证,**建立 SSH 客户端和 SSH 服务器之间的安全隧道**,保护通信双方之间的数据交换。 SSH 支持多种身份验证机制,包括**基于密码的认证**和**基于密钥的认证**。 > [!info] SSH 的默认端口是`22` > [!info] 现代操作系统中都内置了 SSH 相关的命令行工具,例如 `ssh`、`sftp`、`scp` 等。 <br><br><br> # SSH 协议的应用 ### (1)SSH 远程登录 SSH 远程登录允许用户**通过加密的 SSH 连接安全地访问远程计算机的==命令行接口==**,在远程计算机上执行命令。 用户通过 SSH 客户端软件连接到远程服务器,并进行身份验证(使用密码或密钥),连接建立之后,用户就可以在远程系统的 shell 上工作。 ### (2)安全的文件传输 使用 **==SSH File Transfer Protocol (SFTP)==** 或 **==Secure Copy Protocol (SCP)==** 协议安全地传输文件。 这两个协议都**基于 SSH 协议,利用 SSH 提供的安全通道来加密传输的数据**,在传输文件时会先建立一个 SSH 会话,在这一安全会话中进行文件传输。 - SFTP:提供了**文件传输和高级文件管理功能**,包括列出目录、创建删除文件、修改文件权限和文件属性等。 - SCP: 只提供了**复制文件**的功能(类似于命令`cp`),常用于本地和远程服务器之间的文件复制,例如**自动化脚本中定期备份文件**、在服务器之间传输备份文件或归档数据。 ### (3)SSH 隧道 (SSH Tunneling) SSH 隧道是 SSH 中的一种机制,允许**将特定 TPC 端口的网络数据通过加密的 SSH 连接进行转发**,这一 SSH 连接作为数据传输的安全通道,因此该机制也称之为"**隧道(tunneling)**" 或 "**端口转发**"。 #### 工作原理 SSH 隧道**将本地机器上的一个或多个 TCP 端口映射到远程服务器上的端口**,在本地机器与远程服务器之间**创建一个加密的 SSH 连接**,**通过该连接来为指定端口进行数据转发**,安全地传输网络数据。 SSH 端口转发有三种类型: - **本地端口转发**:将本地端口的流量转发到远程服务器上的指定端口,常用于访问仅在远程网络可用的服务。 - **远程端口转发**:将远程服务器端口的流量转发回本地端口,用于提供**对内部网络服务的外部访问**。 - **动态端口转发**:建立 SOCKS 代理,动态地转发流量,常用于安全浏览。 #### SSH 隧道的应用 SSH 隧道能够提供两大功能: - 1)**加密 SSH Client 端至 SSH Server 端之间的通讯数据**。 - 2)**==突破防火墙的限制完成一些之前无法建立的 TCP 连接==**。 SSH 隧道主要用于转发网络流量,为其它应用程序或服务提供安全的网络通道,使用场景包括: - **安全地访问远程服务、传输敏感数据** - 在企业或组织的内部网络中,许多服务(如数据库、邮件服务器、文件服务器)可能不对外公开。通过 SSH 隧道,可以安全地从外部网络访问这些内部服务,传输敏感数据。 - 例如,数据库管理员可以通过 SSH 隧道安全地连接到远程服务器进行管理和维护,传输数据库查询等敏感数据。 - **绕过防火墙或网络限制** - 在某些网络环境中,可能存在对特定服务或网站的访问限制,SSH 隧道可以用来绕过这些限制,安全地访问被阻止的资源。例如,访问内部网络中禁用的网络服务或网站。 - **为不安全的网络协议提供额外的数据加密** - 对本身不提供加密的协议(如 HTTP、FTP、SMTP)下的数据,SSH 隧道提供了一个额外的加密层,增加数据传输的安全性。 - **创建安全的代理** - 通过配置动态端口转发,SSH 隧道可作为一个安全的 SOCKS 代理服务器使用,用于安全地浏览互联网。 ##### SSH 隧道绕过防火墙的原理 1. 许多防火墙和网络限制主要针对未加密的标准 HTTP 或特定的服务端口,而 SSH 通常使用端口 22,这个端口在大多数网络环境中都是开放的,以便允许安全的远程管理。 2. SSH 协议提供了强加密的通信通道,确保**通过这个通道传输的数据对外界是不可见的**。对于外部监控工具来说,SSH 连接中的这些流量看起来就像是普通的 SSH 流量,使得实际的网络流量对外界监控隐藏和不可知,因此虽然数据通过了防火墙,但防火墙等中间网络设备无法识别和检查通过 SSH 隧道传输的实际服务和数据,从而难以针对性地阻止这些流量。 ![ssh-tunnel-corss-fw.png|450](_attachment/02-开发笔记/07-计算机网络/应用层/SSH%20协议.assets/IMG-SSH%20协议-1135355843A29F8F6A47CCF25EEDCCAF.png) ### (4)代理跳板(Proxy Jump) 代理跳板指**使用 SSH 客户端通过一个或多个中间 SSH 服务器来访问最终目标服务器。** 当**直接访问最终目标服务器受限**或不可行时,**代理跳板可以作为中转站来实现间接访问**。 常用于复杂的网络环境,例如访问一台只能通过特定服务器访问的服务器,或者提供对多层网络架构中服务器的访问。 ![/ssh-local-forward.png|550](_attachment/02-开发笔记/07-计算机网络/应用层/SSH%20协议.assets/IMG-SSH%20协议-0171587A5FD75D30E39F0504CB4BA9D4.png) ### (5)SSH 代理 SSH 代理是一种**运行在用户端的程序**,用于**管理 SSH 私钥和自动化身份验证过程**(自动处理认证请求)。 SSH 代理使得**用户每次连接时==无需输入密码或密钥短语==即可建立 SSH 连接**。 ### (6)X11 转发 X11 转发是指通过 SSH 连接来安全地传输 **X11 协议数据**,**将远程 Unix 或 Linux 系统上运行的==图形界面应用程序的显示输出==转发回到本地机器**,专用于 **==图形界面程序的远程显示==**,针对**图形界面数据**进行转发。 参见 [[02-开发笔记/07-计算机网络/应用层/X11 转发|X11 转发]] <br><br><br> # SSH 的工作原理 SSH 由服务器和客户端组成,**为建立安全的 SSH 通道,双方需要先建立 TCP 连接,然后协商使用的版本号和各类算法,并生成相同的会话密钥用于后续的对称加密**。在完成用户认证后,双方即可建立会话进行数据交互 [^1。 SSH 的工作流程包括如下几个阶段: - **建立 SSH 连接** - **版本协商** - **算法协商** - **密钥交换** - **用户认证**(密码认证或密钥认证) - **会话请求** / 建立会话 - **会话交互** > ![SSH工作流程](_attachment/02-开发笔记/07-计算机网络/应用层/SSH%20协议.assets/IMG-SSH%20协议-FC12C93944934DF03050596EF05883AB.png) <br> ### (1) 建立 SSH 连接 **SSH 依赖端口进行通信**(SSH 服务器默认使用端口号 22),在未建立 SSH 连接时,SSH 服务器在指定端口侦听连接请求,当 SSH 客户端向 SSH 服务器该端口发起连接请求后,双方**建立一个 TCP 连接**,**后续通过该端口通信**。 ### (2)版本协商 SSH 协议目前存在 **SSH1. X**(SSH2.0 之前的版本)和 **SSH2.0**版本。SSH2.0 协议相比 SSH1. X 协议来说,在结构上做了扩展,可以支持更多的认证方法和密钥交换方法,同时提高了服务能力。 SSH 服务器和客户端通过协商确定最终使用的 SSH 版本号,过程如下: 1. SSH 服务器通过建立好的连接向 SSH 客户端发送支持的 SSH 版本信息。 2. SSH 客户端收到版本信息后,根据自身支持的 SSH 版本决定使用的版本号,并将决定使用的版本号发送给 SSH 服务器。 3. SSH 服务器判断自己是否支持客户端决定使用的版本号,从而确定版本协商是否成功。 ### (3)算法协商 SSH 工作过程中需要使用多种类型的算法,例如: - 用于产生会话密钥的**密钥交换算法**; - 用于数据信息加密的**对称加密算法**; - 用于进行数字签名和认证的**公钥算法**; - 用于数据完整性保护的**HMAC 算法**; SSH 服务器和客户端对每种类型中具体算法的支持情况不同,因此双方需要协商确定每种类型中最终使用的算法,过程如下: 1. SSH 服务器和客户端分别向对方发送自己支持的算法。 2. SSH 服务器和客户端依次协商每种类型中具体使用的算法。在每类算法的协商过程中,SSH 服务器和客户端都会匹配出双方均支持的算法作为最终使用的算法。每类算法均匹配成功后,算法协商完成。如果某类算法全部匹配失败,则该类型的算法协商失败,这会导致 SSH 服务器和客户端之间算法协商失败并断开连接。 <br> ### (4)密钥交换 SSH 服务器和客户端通过**密钥交换算法**,动态生成**共享的「==会话密钥==」和「==会话 ID==」**,建立加密通道。 **会话密钥主要用于后续数据传输的加密**,会话 ID 用于在认证过程中标识该 SSH 连接。 为保证密钥交换的安全性,SSH 使用一种安全的方式生成会话密钥,**由 SSH 服务器和客户端共同生成会话密钥**,利用数学理论巧妙地实现不直接传递密钥的密钥交换,无需通过不安全通道传送该密钥,具体过程如下图所示。 ![SSH密钥交换](_attachment/02-开发笔记/07-计算机网络/应用层/SSH%20协议.assets/IMG-SSH%20协议-6211B377E276C73268F396983BA44A73.png) SSH 密钥交换: 1. SSH 服务器生成素数 G、P、服务器私钥 b,并计算得到服务器公钥 y=(G^b)%P 。 2. SSH 服务器将素数 G、P、服务器公钥 y 发送给 SSH 客户端。 3. SSH 客户端生成客户端私钥 a,计算得到客户端公钥 x=(G^a)%P。 4. SSH 客户端将客户端公钥 x 发送给 SSH 服务器。 5. SSH 服务器计算得到对称密钥 K=(x^b)%P ,SSH 客户端计算得到对称密钥 K=(y^a)%P,数学定律可以保证 SSH 服务器和 SSH 客户端生成的对称密钥相同。 ### (5)用户认证 SSH 用户认证最基本的两种方式是**密码认证或密钥认证**。为避免中间人攻击,推荐使用**安全性更高的密钥认证**。 #### 5.1 密码认证(password) 密码认证的基本原理:**SSH 服务器生成密钥对**(公钥-私钥),自己保存私钥,而将公钥交给 SSH 客户端使用。**SSH 客户端使用该公钥对密码进行加密**,**SSH 服务器使用其私钥解密后验证密码的合法性**。 具体过程如下图所示: > ![SSH密码认证登录流程](_attachment/02-开发笔记/07-计算机网络/应用层/SSH%20协议.assets/IMG-SSH%20协议-8ED50BF9A783E244ABA55A106F33E189.png) > > SSH 密码认证登录流程: > > 1. SSH 客户端向 SSH 服务器发送登录请求。 > 2. SSH 服务器将服务器公钥发送给 SSH 客户端。 > 3. SSH 客户端输入密码,使用服务器公钥加密密码后发送给 SSH 服务器。 > 4. SSH 服务器收到密文,使用服务器私钥解密得到密码。验证密码是否正确,如果正确则认证通过。 ##### ==中间人攻击== **密码认证方式存在中间人攻击的风险**:如果有人截获了 SSH 客户端的登录请求后,**冒充 SSH 服务器将伪造的公钥发送给 SSH 客户端**,就可以获取到用户的登录密码。 因此,在密码认证的方式下,当首次登录 SSH 服务器时,**SSH 客户端上会提示公钥指纹**,并询问用户是否确认登录。**用户确认后公钥将被保存并信任,下次访问时,SSH 客户端将会核对 SSH 服务器发来的公钥和本地保存的是否相同**。这种方式适用于公布了公钥指纹的 SSH 服务器以及已登录过正确 SSH 服务器的 SSH 客户端。 #### 5.2 密钥认证(publickey) 密钥认证的基本原理:**SSH 客户端生成密钥对(公钥-私钥**),并将公钥存储在远程 SSH 服务器上,而将私钥保存在本地。客户端公钥将被 SSH 服务器用于对随机内容进行加密,而 SSH 客户端使用自己的私钥解密并发送给服务器以证实自己的身份。 具体的过程如下图所示: > ![SSH密钥认证登录流程](_attachment/02-开发笔记/07-计算机网络/应用层/SSH%20协议.assets/IMG-SSH%20协议-2A02C8C495B35908562AAE71DE933701.png) > > ##### SSH 密钥认证登录流程 > > 1. 在进行 SSH 连接之前,SSH 客户端需要先生成自己的公钥-私钥对,并将公钥存放在 SSH 服务器上。 > 2. SSH 客户端向 SSH 服务器发送登录请求。 > 3. SSH 服务器根据请求中的用户名等信息在本地搜索客户端的公钥,并用这个公钥加密一个随机数发送给客户端。 > 4. SSH 客户端使用自己的私钥对返回信息进行解密,并发送给 SSH 服务器。 > 5. SSH 服务器验证 SSH 客户端解密的信息是否正确,如果正确则认证通过。 <br> ### (6)会话请求 / 建立会话 认证通过后,SSH 客户端向服务器发送会话请求,请求服务器提供某种类型的服务,即请求与服务器建立相应的会话。服务器根据客户端请求进行回应。 ### (7)会话交互 SSH 会话建立后,SSH 服务器端和客户端在**该会话上**进行数据信息的交互,双方发送的数据**==均使用会话密钥进行加解密==**。 <br><br><br> # SSH 连接工具 SSH 连接工具:实现了 SSH 协议,能够建立 SSH 客户端和 SSH 服务器之间的连接并进行 SSH 安全通信的工具。 主流的 SSH 连接工具: - PuTTY > 一个免费、开源的、轻量级的 SSH 和 Telnet 连接工具,支持 Telnet、SSH、rlogin、纯 TCP 以及串行接口连接,提供基本的远程终端功能和一些高级设置。PuTTY 主要用于 Windows 上,也有其它系统的版本。 - OpenSSH - XShell > Window 平台上的强大的终端仿真软件,提供图形用户界面,支持多标签和多会话管理,具有丰富的配置选项和自定义功能,支持 SSH 以及其他协议如 Telnet、Rlogin、SFTP、Windows 平台的 TELNET 等多种协议。 - FinalShell > 一款国人开发的 SSH 客户端工具,支持 Windows, Mac OS X, Linux 多平台,主要用于一体化服务器管理,软件支持 shell 和 sftp 同屏显示,并同步切换目录,不仅作为 SSH 客户端,还可作为运维工具。提供了一键 SSH 登录,命令自动提示,快捷命令面板,数据传输,内置文本编辑器等功能。 - Terminus > 一个现代的全平台 SSH 客户端,支持 Windows、macOS、Linux 以及 iOS 和 Android 平台,支持 SSH、Mosh、Telnet 连接,并且提供跨平台数据同步、端口转发、命令补全、快捷输入等功能,支持标签分组服务器、多窗口分屏管理,内置 SFTP 文件传输,支持 - windterm - MobaXterm <br><br> ## OpenSSH OpenSSH 是一个**开源工具套件**,提供了**一系列**基于 SSH 协议的网络通信工具,包括 `ssh`、`scp`、`sftp` 等命令行工具,其**完全基于命令行,没有图形用户界面**。 OpenSSH 广泛应用于 Unix-like 系统(如 Linux 和 macOS),而在 Windows 10 及更高版本中也提供了内置支持[^2],OpenSSH 客户端默认位于 `C:\Windows\System32\OpenSSH` 目录中。 **OpenSSH 主要工具**: - `ssh`: SSH 客户端程序,用于**远程登录**,安全地连接到远程服务器的命令行接口; - `sshd`:SSH 守护进程(服务器端进程),用于**在远程主机上监听客户端的连接请求** - `scp`:基于 SSH 的文件复制工具,用于在本地和远程系统之间安全地复制文件 - `sftp`:**文件传输**客户端,提供了一个交互式的命令行模式来**访问、传输和管理远程文件** - `ssh-keygen`:用于生成、管理和转换 SSH 密钥的工具 - `ssh-agent`:一个密钥管理程序,可以保存私钥,并在需要时为 SSH 客户端提供密钥。 <br><br><br> # SSH 身份认证机制 SSH 提供了多种身份认证方法,主要方法包括: - **密码认证**:SSH 服务器生成密钥对,将公钥发给 SSH 客户端使用 - **密钥认证**:SSH 客户端生成密钥对,将公钥存放在远程服务器上,而私钥保留在本地 - **Kerberos 认证**:Kerberos 是一种网络认证协议,它使用**票证授权机制**。在支持 Kerberos 的环境中,SSH 可以配置为使用 Kerberos 进行身份验证。Kerberos 认证提供了强大的安全性,特别是在企业或教育网络环境中。 - **单点登录 (Single Sign-On, SSO)** - 在某些大型网络环境中,SSH 可以配置为支持单一登录,使用户可以在多个系统之间无缝移动,而无需重复登录。SSO 的安全性取决于实现的方式,通常与 Kerberos 结合使用。 - **两因素认证(Two-factor authentication,2FA)** - 这种方法结合了两种不同的认证机制,例如 "密码和一次性密码(OTP)" 或者 "密钥和生物识别" 。 - 提供了额外的安全层次,因为即使其中一个因素被泄露,未经授权的用户也难以获得访问权限。 <br> # SSH 相关密钥 SSH 建立连接时以及后续通信过程中涉及两种类型的密钥:**会话密钥** 和 **身份认证相关的密钥**。 - **==会话密钥==**:由 SSH 客户端和服务器端共享,用于**加密后续的所有通信数据**。 - **==身份认证==相关的密钥**:用于进行用户认证。 - 在 **==密码认证==** 的方式下,由**SSH 服务器生成密钥对**(公钥-私钥),并将公钥发给 SSH 客户端使用。 - 在 **==密钥认证==** 的方式下,由**SSH 客户端生成密钥对**(公钥-私钥),并将公钥交给 SSH 服务器使用。 <br> # ssh 密钥 ### ssh 密钥相关文件 windows 系统上 ssh 密钥默认保存位置为 `C:\Users\DHDouglas\.ssh` 该目录下包含以下文件: ![[_attachment/02-开发笔记/07-计算机网络/应用层/SSH 协议.assets/IMG-SSH 协议-FC286E00C119969D4542655AB2F767A5.png|325]] - `config` :ssh 配置文件 - `id_xxx` :**私钥**,其中 `xxx` 为加密算法,例如 `id_rsa`、 `id_ed25519`; - `id_xxx.pub` : **公钥** - `known_hosts` :缓存文件,**缓存==已访问过的 SSH 服务器的公钥==**。 ###### `known_hosts` 文件 该文件用于**存储SSH客户端访问过的每个SSH服务器的==公钥==**。 当本机连接到一个 SSH 服务器时,**服务器会向本机的 SSH 客户端提供其主机密钥的==公钥==**, 这一 **"公钥" 即被保存到`known_hosts`文件**中,并在**此后的每次连接**中用它来 **==验证服务器的身份==** 。 这一过程防止了“**中间人攻击**”,确保本机连接的是真正的服务器,而不是伪装的。 %% 文件每一行记录格式为: `主机:端口号 密钥类型(rsa、dsa、ed25519等) 密钥本身的加密形式`,如下图所示: ![[_attachment/02-开发笔记/07-计算机网络/应用层/SSH 协议.assets/IMG-SSH 协议-D98FDB54B8B030EE45455A6C4CDA9896.png|575]] %% <br><br> ### 配置 SSH 密钥认证 1. **生成密钥对**:在本地计算机上使用 `ssh-keygen` 命令生成一对密钥。 2. **复制公钥到远程服务器**:使用 `ssh-copy-id` 命令或手动方式将公钥复制到远程服务器的 `~/.ssh/authorized_keys` 文件。 3. **通过 SSH 连接**:连接时,SSH 客户端使用私钥进行认证,而服务器通过与之对应的公钥**验证用户的身份**。 #### 生成密钥对 以 OpenSSH 提供的 `ssh-keygen` 工具为例,有两种方式: 1. **默认方式**(**生成 RSA 密钥**): - 输入 `ssh-keygen` 命令,启动**交互式**依次指定密钥存储路径、密钥密码(可选)。 2. **参数指定的方式**:`ssh-keygen -t 密钥类型 -f 存储路径 -b 密钥比特长度 -C 密钥注释` - 示例:`ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "[email protected]"` 使用示例: ![[_attachment/02-开发笔记/07-计算机网络/应用层/SSH 协议.assets/IMG-SSH 协议-65A4E0C4206B9E0DB4DD1F4399BDD5B8.png|500]] 上述命令执行后,会在 `~/.ssh` 路径下生成**对应的 `id_rsa`(密钥)和 `id_rsa.pub` (公钥)文件**。 #### 将公钥复制到远程服务器 若本机为 Linux 系统(自带 `ssh-copy-id` 命令行工具),**可通过 `ssh-copy-id username@ip` 命令==将公钥自动复制到远程服务器==的 `~/.ssh/authorized_keys` 文件中**。 若本机为 Windows 系统,有以下方式: - 1. **手动复制**:本机公钥 `id_rsb.pub` 到远程服务器中的 `~/.ssh/authorized_keys` 文件中; - 2. 通过远程命令**拷贝 `id_rsb.pub`** 到远程服务器中,再通过 `cat` 追加到`~/.ssh/authorized_keys` 文件中 ```PowerShell # 直接覆盖 scp "$HOME\.ssh\id_rsa.pub" [email protected]:~/.ssh/authorized_keys # 追加 scp "$HOME\.ssh\id_rsa.pub" [email protected]:/tmp/tempkey.pub ssh [email protected] "cat /tmp/tempkey.pub >> ~/.ssh/authorized_keys && rm /tmp/tempkey.pub" ``` - 3. 通过远程命令**直接追加 `id_rsb.pub` 文件内容到远程服务器**中的 `~/.ssh/authorized_keys` 文件中 ```PowerShell $type = Get-Content -Path "$HOME\.ssh\id_rsa.pub" ssh [email protected] "echo '$type' >> ~/.ssh/authorized_keys" ``` > [!NOTE] PowerShell 不会自动解析 `~` 为用户的主目录,因此需要用环境变量 `$HOME` 替换 <br><br> # 参考资料 # Footnotes [^1]: [什么是SSH?SSH是如何工作的? - 华为](https://info.support.huawei.com/info-finder/encyclopedia/zh/SSH.html) [^2]: [Windows 10和11中系统内置了基于OpenSSH的SSH客户端和服务器](https://learn.microsoft.com/zh-cn/windows/terminal/tutorials/ssh)