Python paramiko RejectPolicy、AutoAddPolicy、WarningPolicy的安全含义是什么

Python paramiko RejectPolicy、AutoAddPolicy、WarningPolicy的安全含义是什么,python,security,networking,ssh,Python,Security,Networking,Ssh,有人能解释一下他们之间的区别吗?具体来说,是否存在任何安全问题,例如AutoAddPolicy?提前感谢这些“丢失主机密钥策略”是用于确定如何处理尚未建立为“已知”(即受信任)的“主机密钥”(即服务器的公共ssh密钥)的安全策略 RejectPolicy是唯一的安全策略 AutoAddPolicy和WarningPolicy都为中间人攻击打开了大门 为了理解这一点,让我们看看ssh: 在ssh连接中,两个服务器都有一个公共ssh密钥,它发送给客户机(即您)。此公钥可用于唯一标识服务器,并授权验证

有人能解释一下他们之间的区别吗?具体来说,是否存在任何安全问题,例如AutoAddPolicy?提前感谢

这些“丢失主机密钥策略”是用于确定如何处理尚未建立为“已知”(即受信任)的“主机密钥”(即服务器的公共ssh密钥)的安全策略

RejectPolicy是唯一的安全策略

AutoAddPolicy和WarningPolicy都为中间人攻击打开了大门

为了理解这一点,让我们看看ssh:

在ssh连接中,两个服务器都有一个公共ssh密钥,它发送给客户机(即您)。此公钥可用于唯一标识服务器,并授权验证内容是否确实来自该服务器

在交互式会话中使用ssh时,如果您以前从未连接过服务器,您将看到以下消息:

C:\>ssh x.y.z.com
The authenticity of host 'x.y.z.com' can't be established. 
RSA key fingerprint is SHA256:6E5SThbpng6kJWxiKwGl7EXUp1IGOng6kCsRLvRomT. 
Are you sure you want to continue connecting (yes/no)?
如果选择“是”,主机名/公钥将添加到.ssh目录中名为“已知主机”的文件中(通常位于
~/.ssh/known\u hosts
%userprofile%\.ssh\known\u hosts
)。然后,下次连接时,它将不需要再次提示您,因为它是“已知”主机。如果在未验证信息的情况下选择“是”,则有可能发生中间人攻击

如果选择“否”,则拒绝连接

帕拉米科认为你不会来回答这个问题,所以它有政策

如果在主机密钥文件中找不到主机名/公钥,RejectPolicy将拒绝连接

AutoAddPolicy接受任何连接,无论发生什么。除此之外,它还将主机/公钥保存到主机密钥

WarningPolicy与AutoAddPolicy类似,只是它不会将主机/公钥保存到主机密钥中,而且它还打印出一条可能会被忽略的小警告消息(如果看到的话)

以下是安全连接到允许匿名连接的主机的示例:

with paramiko.SSHClient() as ssh_client:
    ssh_client.load_host_keys(os.path.expanduser("~/.ssh/known_hosts"))
    ssh_client.set_missing_host_key_policy(paramiko.RejectPolicy())
    ssh_client.connect(host)

RejectPolicy是唯一的安全策略,但有时也会很不方便,具体取决于您必须更新“已知主机”的频率。

很抱歉,由于飓风摧毁了整个网络基础设施,因此延迟了答复。。。不管怎样,这是一个很棒的解释。我想我可以限制生成新密钥的频率,当然可以避免那些特定的策略。谢谢你的时间和知识!