【发布时间】:2010-07-17 20:32:12
【问题描述】:
system("ssh test.host.com");
它是否要求永久添加密钥?
我想要它应该自动说是!
【问题讨论】:
-
首先,请阅读为什么 ssh 会问这个问题以及总是响应“是”的安全隐患。然后决定这些是否为您所接受。然后问怎么做。
system("ssh test.host.com");
它是否要求永久添加密钥?
我想要它应该自动说是!
【问题讨论】:
ssh 会询问您是否要连接,即使尚未检查主机的公钥,这是因为在您的 /etc/ssh/ssh_config 或 ~/.ssh/config 中有 StrictHostKeyChecking ask(或 yes)。如果您想自动将未知主机密钥添加到您的known_hosts 文件,您可以将其设置为no。如果您不想将其作为永久配置更改,您也可以在命令行中使用它:
system("ssh -o StrictHostKeyChecking=no test.host.com");
在任何一种情况下,ssh 都会在主机密钥不匹配时发出警告,并且会因为可能的中间人攻击而禁用密码验证。您仍然可以使用公钥身份验证登录。
【讨论】:
必须有人同意第一个密钥是有效的。您可以要求用户手动将相关信息添加到 ~/.ssh/known_hosts(或自己做)。
【讨论】:
在启动应用程序之前运行 SSH Agent 并使用它来添加键(Windows 上的菜单中的选项或 Unix 上命令行中的 ssh-add)。
【讨论】:
正如 Nathon 所说,解决此问题的正确方法是在已知密钥列表中获取 hosts 密钥。简单的方法是手动 ssh 到主机一次并回答是,然后密钥将缓存在 $HOME/.ssh/known_hosts 中。这必须为您将连接到的每台主机以及将运行该程序的每个用户完成。如果您在系统上拥有管理员权限,则您运行的 ssh 还可以将主机密钥添加到 /etc/ssh/ssh_known_hosts 以使所有用户都可以使用它们。
如果您不知道脚本将连接到哪个主机,您可能需要查看 Expect 之类的模块来观察和响应主机密钥提示。虽然自动化这一步会破坏 ssh 提供的一些安全性。
【讨论】: