Ssh 为什么SFTP客户端只需要知道私钥,而不是';t需要公钥吗?
当我从客户端连接SFTP服务器时,我只需要向客户端软件提供私钥,而不是公钥。我不知道这是如何工作的,因为从[1]和[2]来看,两者都要求客户端软件也知道公钥 我对SFTP工作原理的理解是 设置Ssh 为什么SFTP客户端只需要知道私钥,而不是';t需要公钥吗?,ssh,sftp,Ssh,Sftp,当我从客户端连接SFTP服务器时,我只需要向客户端软件提供私钥,而不是公钥。我不知道这是如何工作的,因为从[1]和[2]来看,两者都要求客户端软件也知道公钥 我对SFTP工作原理的理解是 设置 客户端:生成私钥/公钥对 客户端:将公钥发送到服务器 服务器:将此公钥添加到其授权密钥列表 连接期间 客户端:告诉服务器公钥 服务器:检查公钥是否已授权,如果未授权,则拒绝,否则,向客户端发送随机会话id 客户端:客户端使用私钥对随机会话id进行编码并发送到服务器 服务器:通过公钥解码并确认身份
- 客户端:生成私钥/公钥对
- 客户端:将公钥发送到服务器
- 服务器:将此公钥添加到其授权密钥列表
- 客户端:告诉服务器公钥
- 服务器:检查公钥是否已授权,如果未授权,则拒绝,否则,向客户端发送随机会话id
- 客户端:客户端使用私钥对随机会话id进行编码并发送到服务器
- 服务器:通过公钥解码并确认身份
[2] 虽然@Pascal Cuoq的评论是正确的答案,但它只是答案的一半,因为实际上,客户端确实需要公钥,但只需要服务器的公钥,而且您的
已知主机文件中已经有了公钥
如果不信任,则会要求您信任服务器在您第一次连接到服务器时显示的服务器。这是大多数人完全忽视的事情。如果您在第一次连接期间DNS中毒(或有其他形式的中间人攻击正在进行),或者不注意服务器标识已更改
通知,则易受MitM攻击。客户端从私钥计算公钥。谢谢!这解释了一切。另外,我可以通过'ssh-keygen-y'获取公钥,从私钥中获取公钥(因为我使用OpenSSH)。看到一个实际的问题而不是“我的代码无法运行plz帮助”,这让人耳目一新。我将投赞成票,因为我不太明白为什么客户端维护私钥而不是服务器。从这个问题以及我读到的内容来看,如果我希望使用密钥连接到服务器,我需要生成密钥对。我保留私钥,并向服务器提供公钥的副本。您似乎还建议我需要服务器的公钥,这表明服务器有私钥。抱歉,我感到困惑。@服务器还有一个名为主机密钥的私钥
-它用于向用户验证服务器,就像您的私钥用于向服务器验证一样。谢谢Kimvais。如果我有关于SFTP的更多问题,你介意我给你发封电子邮件吗?