Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssh 为什么SFTP客户端只需要知道私钥,而不是';t需要公钥吗?_Ssh_Sftp - Fatal编程技术网

Ssh 为什么SFTP客户端只需要知道私钥,而不是';t需要公钥吗?

Ssh 为什么SFTP客户端只需要知道私钥,而不是';t需要公钥吗?,ssh,sftp,Ssh,Sftp,当我从客户端连接SFTP服务器时,我只需要向客户端软件提供私钥,而不是公钥。我不知道这是如何工作的,因为从[1]和[2]来看,两者都要求客户端软件也知道公钥 我对SFTP工作原理的理解是 设置 客户端:生成私钥/公钥对 客户端:将公钥发送到服务器 服务器:将此公钥添加到其授权密钥列表 连接期间 客户端:告诉服务器公钥 服务器:检查公钥是否已授权,如果未授权,则拒绝,否则,向客户端发送随机会话id 客户端:客户端使用私钥对随机会话id进行编码并发送到服务器 服务器:通过公钥解码并确认身份

当我从客户端连接SFTP服务器时,我只需要向客户端软件提供私钥,而不是公钥。我不知道这是如何工作的,因为从[1]和[2]来看,两者都要求客户端软件也知道公钥

我对SFTP工作原理的理解是

设置

  • 客户端:生成私钥/公钥对

  • 客户端:将公钥发送到服务器

  • 服务器:将此公钥添加到其授权密钥列表

连接期间

  • 客户端:告诉服务器公钥

  • 服务器:检查公钥是否已授权,如果未授权,则拒绝,否则,向客户端发送随机会话id

  • 客户端:客户端使用私钥对随机会话id进行编码并发送到服务器

  • 服务器:通过公钥解码并确认身份

在这种情况下,客户端需要公钥。然而,我没有提供这个,但是SFTP客户端仍然能够连接服务器。那么这个SFTP协议到底是如何工作的呢

[1]


[2] 虽然@Pascal Cuoq的评论是正确的答案,但它只是答案的一半,因为实际上,客户端确实需要公钥,但只需要服务器的公钥,而且您的
已知主机文件中已经有了公钥


如果不信任,则会要求您信任服务器在您第一次连接到服务器时显示的服务器。这是大多数人完全忽视的事情。如果您在第一次连接期间DNS中毒(或有其他形式的中间人攻击正在进行),或者不注意
服务器标识已更改
通知,则易受MitM攻击。

客户端从私钥计算公钥。谢谢!这解释了一切。另外,我可以通过'ssh-keygen-y'获取公钥,从私钥中获取公钥(因为我使用OpenSSH)。看到一个实际的问题而不是“我的代码无法运行plz帮助”,这让人耳目一新。我将投赞成票,因为我不太明白为什么客户端维护私钥而不是服务器。从这个问题以及我读到的内容来看,如果我希望使用密钥连接到服务器,我需要生成密钥对。我保留私钥,并向服务器提供公钥的副本。您似乎还建议我需要服务器的公钥,这表明服务器有私钥。抱歉,我感到困惑。@服务器还有一个名为
主机密钥的私钥
-它用于向用户验证服务器,就像您的私钥用于向服务器验证一样。谢谢Kimvais。如果我有关于SFTP的更多问题,你介意我给你发封电子邮件吗?