2010-07-16 193 views
2
system("ssh test.host.com"); 

其要求permentaly是否添加密钥?如何处理ssh密钥?

我想自动它应该说是的!

+4

首先,阅读* why * ssh询问以及总是回复yes的安全含义。然后决定这些是否可以接受。然后问如何去做。 – ysth 2010-07-16 17:34:42

回答

1

运行SSH Agent,然后再启动应用程序并使用它添加一个密钥(在Windows上的菜单中选项或从Unix上的命令行使用ssh-add)。

+3

我不明白这个答案与被问到的问题有什么关系,也不知道为什么它得到了接受的答案。问题是将主机的公钥添加到本地的known_hosts文件中。 ssh-add命令用于客户端对服务器的公钥认证,而不用于验证服务器的主机密钥。 – Jonas 2010-07-17 12:35:35

4

有人必须同意第一个键是有效的。您可以要求用户手动添加相关信息到〜/ .ssh/known_hosts(或者自己动手)。

1

正如Nathon提到的解决这个问题的正确方法是获取已知密钥列表中的主机密钥。简单的方法是手动ssh到主机,然后回答yes,然后密钥将被缓存在$HOME/.ssh/known_hosts中。必须为每个将连接到的主机以及将运行该程序的每个用户执行此操作。如果您在系统上拥有管理员权限,则从您运行的ssh还可以将主机密钥添加到/etc/ssh/ssh_known_hosts以使其可供所有用户使用。

如果您不知道脚本将连接到哪个主机,则可能需要查看Expect这样的模块来监视和响应主机密钥提示。虽然自动化这一步颠覆了ssh提供的一些安全性。

8

ssh询问您是否想即使主机的公钥不检查尚未连接的事实是你/etc/ssh/ssh_config~/.ssh/configStrictHostKeyChecking ask(或yes)的结果。如果您想自动将未知主机密钥添加到您的known_hosts文件中,您可以将其设置为no。如果你不想让这永久的配置更改,您也可以使用它的命令行:

system("ssh -o StrictHostKeyChecking=no test.host.com");

在这两种情况下,ssh将发布关于主机密钥不匹配的将禁用密码警告由于可能的中间人攻击而进行身份验证。您仍然可以使用公钥认证进行登录。

+0

+1:对我来说这是正确的答案,而不是接受的答案! – Lars 2010-07-17 12:39:14

+0

为你+1:我必须同意;不知何故,我被这个奇怪的语法搞糊涂了。 – 2010-07-19 07:03:46