1

我想将pscp一些文件从 Windows 传输到 Linux 服务器。以下代码(PowerShell)是我正在尝试的。它工作得很好,但我需要输入y,当它试图与远程服务器通信时,因为 Windows 的主机名是未知的。

$proc = Start-Process powershell.exe -Credential $credential -ArgumentList "Start-Process C:\pscp.exe -Verb RunAs -ArgumentList '-i C:\prikey.ppk D:\temp\* corey@11.22.33.44:/home/corey/' -Wait" -PassThru
$proc.WaitForExit()

它将显示如下内容:

服务器的主机密钥未缓存在注册表中。您无法保证服务器就是您认为的计算机。服务器的 ssh 密钥指纹为:xxxxxx 如果信任此主机,输入“y”将密钥添加到 PuTTY 的缓存中并继续连接...... 将密钥存储在缓存中?(是/否)

有没有办法在echo "y"使用时自动(非交互式)Start-Process?或者禁用 Windows 的 SSH 主机检查(对我来说更好)?

任何帮助表示赞赏。

4

1 回答 1

1

不要试图盲目回答“y”来pscp主机密钥验证提示。您失去了对中间人攻击的保护。

您应该使用带有主机密钥指纹的-hostkey开关。


主机密钥是您应该拥有的有关任何 SSH 服务器的信息的一部分,以及凭据。– 尽管作为一种折衷方案,您可能希望实现等效的 OpenSSHaccept-new模式。有关示例,请参阅 WinSCP 文章实现 SSH 主机密钥缓存(已知主机)。– 如果您使用"MD5"而不是"SHA-256",您将获得几乎为所需格式的指纹pscp

于 2019-12-26T08:47:54.717 回答