有没有办法在 PuTTY 中自动接受 SSH 主机密钥(即使密钥已更改)?

有没有办法在 PuTTY 中自动接受 SSH 主机密钥(即使密钥已更改)?

我们使用一些软件,这些软件会通过 SSH 连接到一堆机器并执行某些操作。问题是在我们的测试实验室中,虚拟机经常被重新更新(销毁并重新创建),因此软件会将虚拟机视为新的,并且会失败,因为无法确定主机的真实性。我被告知要手动输入 PuTTY 并接受主机密钥,之后软件就会正常运行。

使用几百台虚拟机来做这件事并不好玩。

因此,我想知道是否有任何命令工具可以自动接受 PuTTY 的主机密钥?我们在一个封闭的实验室里,所以我不太担心安全问题。

我知道有一些针对 Linux 环境的解决方案,但这个是 Windows 的。

答案1

上面的@Paul建议使用pscp。它效果很好,非常简单,而且完全可以编写脚本:

 C:\> echo y | pscp.exe -l user -pw password -ls 192.168.0.1:/

答案2

在他们的官方网站上,开发人员明确表示,PuTTY 不会提供这样的功能(我强调):

自动接受所有 SSH 主机密钥的选项。出于某种原因,很多人似乎认为这将是一个非常有用的功能。我相信这会非常方便,但代价是牺牲安全性!主机密钥的全部意义在于,它们是唯一能保证您与服务器之间的连接不会被主动攻击者劫持,并且您的数据不会被攻击者解密并重新加密的保证。如果您想安排自动批处理作业以使用 PSCP 或 Plink,而交互式主机密钥提示使此操作变得困难,请提前将正确的主机密钥添加到注册表中。(更新,2014-09-09:或者如果注册表不可用,您可以使用新的 -hostkey 选项在命令行上指定正确的密钥或指纹。)这样,您仍然可以获得便利,但不会失去安全性。我们不会接受通过命令行选项来关闭主机密钥检查,无论有多少人已经完成这项工作并向我们发送了完善的生产质量补丁。

如果您有常见的“known_hosts”格式的主机密钥,我们有一个脚本可以将它们转换为 Windows .REG 文件,可以通过双击提前安装。

来源:http://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/accept-host-keys.html

因此不幸的是,如果没有用户交互,PuTTY 就无法实现这一点。

答案3

我在编写 powershell 脚本与 kitty 交互以备份我们所有的交换机配置时遇到了同样的问题。我在另一个论坛上找到了一个试图与 Microsoft 计算器程序交互的人的帖子。我的程序基本上等到接受 RSA 密钥窗口打开然后发送 y 密钥。这是我找到的帖子:使用 PowerShell 向应用程序提供输入

答案4

我知道这是一篇旧帖子,但这可能是一种使用 Powershell 和 pscp 并保持一点安全性的方法。它仍然是一个未完成的、未经完全测试的脚本,但也许是一种方法……

$storeddevicehostkeypath = "C:\temp\_hostkeys\keyfile.tmp"
pscp -batch -v [email protected]:validatekey dummy2validatekey  2>&1  | tee -Variable allOutput | out-null
$stderr = $allOutput | ?{ $_ -is [System.Management.Automation.ErrorRecord] }
$stdout = $allOutput | ?{ $_ -isnot [System.Management.Automation.ErrorRecord] }
$hostkey = ([regex]"(?>ssh-[a-zA-Z0-9]{1,9}) (?>[0-9]{3,4}) ((?>[0-9a-f]{2}:){15}[0-9a-f]{2})").match("$stderr").Groups[1].value


"Validate if hostkey changed or already known"
if (test-path $storeddevicehostkeypath) {
    if ($hostkey -eq (gc $storeddevicehostkeypath)) {"Hostkey has not changed since last login"} else {"NO ACCESS GRANTED because of security rule! Hostkey has changed!"; exit 2}
} else {
    "hostkey not stored unter $storeddevicehostkeypath - creating new file"
    $hostkey | out-file -FilePath "$storeddevicehostkeypath"
}


"Trying to connect with hostkey $hostkey"
pscp -batch -hostkey $hostkey -v [email protected]:sys back  2>&1  | tee -Variable allOutput | out-null
$allOutput[-1].ToString()

正如前面提到的 - 尚未完全测试且未完成

相关内容