在没有手动生成的公钥/私钥对的情况下,SFTP 如何运行

信息安全 SSH 上传文件
2021-08-18 11:27:57

我正在学习 SSH 以及如何使用它来保护 Windows 机器和 Linux 服务器之间的文件传输和命令。到目前为止,我所阅读的所有内容都表明我需要使用 SFTP 客户端(如 WinSCP)连接到我的服务器并传输文件。再深入一点,WinSCP 的文档从未告诉我在我的客户端和服务器上设置公钥或私钥对。我认为公钥和私钥是 SSH 工作方式的基本要素。SFTP(我读过基于 SSH)如何在没有公钥和私钥对的情况下运行(或者在这种情况下它是否默认为像 FTP 这样的不安全模式?)

最初,我认为我需要为每个想要连接到服务器的人创建这些对,并手动将公钥文件复制到客户端机器上。

编辑==============================

我不明白有两组公钥/私钥正在使用中,一组由服务器创建,另一组可能由客户端创建。最初,我认为它们是相同的公钥/私钥对。

3个回答

简短的回答:服务器上必须有一个公钥/私钥对。客户端上可能有一个公钥/私钥对,但服务器可能会选择使用密码对客户端进行身份验证,


SSH是一种通用的隧道机制,其中传输了一些“应用程序数据”。一个这样的应用程序是“远程外壳”,它用于在服务器上获得一个开放的“终端”,终端应用程序可以在其中运行。另一个不同的应用程序是称为 SFTP 的文件传输协议。从 SSH 的角度来看,使用哪个应用程序是无关紧要的。这意味着任何身份验证概念都同样适用于 SSH(“远程外壳”部分)和 SFTP。

服务器必须有一个公钥/私钥对。该密钥用于隧道部分,因此服务器将对所有应用协议使用相同的密钥对。大多数类 Unix 操作系统(例如 Linux)在首次安装时会创建一个 SSH 密钥对,之后会使用它。这意味着当您将 SSH 服务器配置为也用作 SFTP 时,您不必“创建密钥”:服务器已经有密钥。

如果客户端希望基于该密钥进行身份验证,它可能具有公钥/私钥对;这都是关于客户端身份验证的,即关于服务器如何确保它正在与正确的客户端交谈。基于密码的身份验证和基于密钥的身份验证是两种最常见的方法(某些服务器配置为同时要求这两种方法)。根据定义,只有基于密钥的身份验证需要客户端存储和使用自己的密钥对。

它能够运行是因为密钥对已经存在于服务器上。SSH 服务器具有保护传输中的信息所需的密钥。SSH 服务器将使用公钥,客户端设备使用公钥加密发送到服务器的信息。然后,服务器使用其私钥解密该信息并进行处理。

http://www.slashroot.in/secure-shell-how-does-ssh-work

在 SSH 中,您有两组密钥对:一组用于服务器,一组用于用户。

服务器密钥对是强制性的,但它通常是在安装服务器期间生成的:您所要做的就是验证服务器公钥指纹(一个简单的哈希),只要密钥未更改,您的客户端就会静默连接.

但是,您用于身份验证的密钥对可以是可选的(或不允许的),具体取决于您决定在服务器上允许或要求的身份验证方法。

关于 SSH的Wiki 文章有很多有趣的细节,但总而言之,有 4 种受支持的身份验证机制:

  • 密码需要用户名和密码组合
  • 公钥需要访问您用于身份验证的公钥的私有部分(通常,您在客户端上设置密钥对并使用您的公钥更新服务器配置)。
  • 键盘交互主要用于一次性密码等。
  • GSSAPI,用于实现其他身份验证方案的框架,通常用于实现单点登录(最著名的是Kerberos