Cygwin 程序 (sshpass) 在 Windows 命令提示符下使用时不产生任何输出

sta*_*fry 6 cygwin

我已经在 Cygwin 上构建了 sshpass。它可以在 Cygwin 终端窗口中完美运行:

sshpass -p password ssh -o StrictHostKeyChecking=no user@host
Run Code Online (Sandbox Code Playgroud)

但是,来自 Windows 命令提示符的完全相同的命令不会产生任何输出。

我尝试了一个非交互式命令来查看它是否有效,但它没有:

sshpass -p password ssh -o StrictHostKeyChecking=no user@host ls
Run Code Online (Sandbox Code Playgroud)

两者都可以在 Cygwin 环境中正常工作,但不能在 Windows 命令提示符下运行。它们确实在 Windows 命令提示符下工作,但没有输出。我知道这一点是因为我可以从cmd.exe窗口发出命令并查看对远程主机的影响。此外,普通ssh(Cygwin 之一)在 Windows 命令提示符下工作正常。

sshpass在 Windows 命令提示符下使用时如何获取输出?

sta*_*fry 5

这不起作用的原因是由于 cygwin 和本机 Win32 程序之间的 stdin/stdout 重定向不兼容,但有一个称为包装程序的程序cygnative可以解决该问题。它允许像这样使用所需的命令行:

C:> cygnative sshpass -p password ssh -o StrictHostKeyChecking=no user@host ls
Run Code Online (Sandbox Code Playgroud)

(这适用于非交互式命令,但不适用于交互式终端会话)

原作者的链接cygnative.exe已失效,但它可以作为本 gist 中的C 源代码或作为本 zip 中的源代码和可执行文件使用。


我在尝试解决另一个问题时发现了这个解决方案,这次尝试使用rsync过 PuTTY 的plink程序。我收到一个错误:

Unable to read from standard input: The parameter is incorrect.
Run Code Online (Sandbox Code Playgroud)

这让我发现cygnative,但由于原始链接已失效,很难对其进行追踪。

问题描述这里,并提出解决方案cygnative在这里,有一个更新的1.2版在这里