paramiko RejectPolicy,AutoAddPolicy,WarningPolicy

时间:2017-08-26 06:46:15

标签: python security networking ssh

有人可以解释它们之间的区别吗?具体而言,AutoAddPolicy是否存在任何安全问题?提前致谢

1 个答案:

答案 0 :(得分:1)

这些" MissingHostKeyPolicies"用于确定如何处理主机密钥的安全策略" (即服务器的公共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)?

如果您选择"是",则将主机名/公钥添加到名为' known_hosts'的文件中。在.ssh目录中(通常位于~/.ssh/known_hosts%userprofile%\.ssh\known_hosts)。然后在下次连接时,它不需要再次提示您,因为它是一个已知的"主办。如果你选择"是"没有验证信息,就有可能发生中间人攻击。

如果您选择" no",则拒绝连接。

Paramiko假设你不会回答这个问题,所以它有政策。

如果在主机密钥文件中找不到主机名/公钥,则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是唯一的安全策略,但它有时也会带来不便,具体取决于您更新“known_hosts”的频率。