Windows 上的“sshpass 无法识别”

Posted

技术标签:

【中文标题】Windows 上的“sshpass 无法识别”【英文标题】:"sshpass is not recognized" on Windows 【发布时间】:2014-06-18 15:17:49 【问题描述】:

我想从我的 Windows 向远程 Linux 服务器运行 sshpass 命令。我使用这个命令:

sshpass -p 'password' ssh ldap.nextstep4it.com -l root -o StrictHostKeyChecking=no

但我的 cmd 返回以下错误语句:

'sshpass' 未被识别为内部或外部命令, 可运行的程序或批处理文件。

我认为这是因为 Windows 没有像 Linux 那样的 sshpass 包。在 Linux 中,我必须安装 sshpass 包才能运行此命令。

有人知道如何通过 Windows 命令行运行sshpass 命令吗?

【问题讨论】:

【参考方案1】:

您不能在 Windows 中运行 sshpass。 但是,您可以通过 windows 命令行使用 putty 来实现相同的目的。

putty -load "host" -l username -pw password

您也可以使用 WinSCP 通过命令行(使用密码)上传文件

winscp /command "option batch abort" "option confirm off" "open sftp://user:password@example.com/" "put examplefile.txt /home/user/" "exit"

【讨论】:

我应该使用什么作为 winscp?例如 winscp.exe 的路径? 它正在为我打开一个“Putty 配置”窗口。我目前正在使用 git bash。我还通过 windows 命令提示符和 powershell 尝试了该命令。它总是打开一个“腻子配置”,就好像它是在没有参数的情况下调用的。这里有什么问题? putty -ssh hostname -l username -pw password 这样效果更好,因为它会打开另一个终端窗口并自动登录到服务器。有没有什么办法可以通过要求它不要打开另一个窗口而只在 git bash 中登录来使它变得更好? plink -ssh hostname -l username -pw password 这是最好的。在我的 git bash 终端中打开并自动登录。正是我需要的。【参考方案2】:

使用 Linux 的 Windows 子系统 (WSL);首先转到Settings->Turn Windows Features On or Off->Enable Windows Subsystem for Linux,然后从Microsoft Store下载并安装Ubuntu或另一个Linux。

要从 cmd.exe 访问 WSL,请键入 bashwsl,我建议将 hyper 用于终端,因为它有选项卡。

sudo apt-get install sshpass

sshpass -p passxxxx ssh user@ip.address 'touch newfileonserver.txt'

从 Windows 环境调用,例如。 cmd.exeProcess.Start()

bash -c "sshpass -p passxxxx ssh user@ip.address 'touch newfileonserver.txt' "

【讨论】:

是的,命令是:wsl -- sshpass ...【参考方案3】:

您可以为 Windows 安装 QtdSync。

这将包含 sshpass.exe

【讨论】:

这对我不起作用,即使我使用 -p 标志提供密码,仍然有密码提示。【参考方案4】:

您可以使用PuTTY plink,而不是 OpenSSH ssh。它是 PuTTY 的命令行等效项,并且具有与 OpenSSH ssh 非常相似的命令行语法。但最重要的是,它有-pw switch 用于提供密码。

plink 等效于您的 ssh 调用是:

plink ldap.nextstep4it.com -l root -pw password

您绝对不应该使用-o StrictHostKeyChecking=no 来盲目接受所有主机密钥。那是一个安全漏洞。您将失去对MITM attacks 的保护。相反,使用plink,您可以使用-hostkey 开关设置预期主机密钥的指纹。


同样:

不要使用 OpenSSH scp,而是使用 PuTTY pscp; 不要使用 OpenSSH sftp,而是使用 PuTTY psftp

两者都有-pw 开关。

或者,对于 SCP 和 SFTP,您可以使用 my WinSCP SFTP/SCP client。 WinSCP 还支持在命令行/脚本中提供密码。还有converting OpenSSH sftp script to WinSCP script 的指南。


不管你使用OpenSSH、PuTTY还是WinSCP,使用公钥认证总是比使用密码好。

【讨论】:

【参考方案5】:

只需在你的 Windows 中安装 cygwin,然后下载 sshpass 并编译/安装它,整个过程快速简单,在我的环境中运行良好。

【讨论】:

30 分钟安装 make & gcc 并运行安装。谢谢:) 如果你没有 gcc 并且不容易安装会发生什么,不敢相信这个二进制文件很难找到【参考方案6】:

你可以试试putty

从here下载

或者您可以安装 cygwin 并安装 sshpass,但这将是一项更大的任务。

因此,如果您需要无密码登录,那么您可以使用 putty 来使用 puttygen,您可以从上面提供的相同链接安装它。

【讨论】:

感谢 Jord 的回答,但它并没有解决我的问题。我想要做的是将 sshpass 包运行到 Windows 命令提示符中。顺便感谢您的回答

以上是关于Windows 上的“sshpass 无法识别”的主要内容,如果未能解决你的问题,请参考以下文章

使用 typeof 检查时调用 window.external 上的无参数方法

Selenium Webdriver - Debian Lenny 上的 FirefoxDriver 问题(错误无显示)

无终端不浪漫Cmder解救Windows终端苦手

Windows Xp 上的 Microsoft.Windows.ActCtx

Windows 8上的WAMP禁止错误

Windows 8上的WAMP禁止错误