Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使ssh在WINDOWS上从stdin接收密码_Windows_Batch File_Cygwin_Openssh - Fatal编程技术网

如何使ssh在WINDOWS上从stdin接收密码

如何使ssh在WINDOWS上从stdin接收密码,windows,batch-file,cygwin,openssh,Windows,Batch File,Cygwin,Openssh,在那里读过书和我的文章之后,我想在Windows上做一件类似的事情 我的Linux解决方案是: #!/bin/bash [[ $1 =~ password: ]] && cat || SSH_ASKPASS="$0" DISPLAY=nothing:0 exec setsid "$@" 如何在Windows上执行类似操作,我可以从Windows命令提示符或批处理文件中使用类似的操作: C:> echo password | pass ssh user@host ...

在那里读过书和我的文章之后,我想在Windows上做一件类似的事情

我的Linux解决方案是:

#!/bin/bash
[[ $1 =~ password: ]] && cat || SSH_ASKPASS="$0" DISPLAY=nothing:0 exec setsid "$@"
如何在Windows上执行类似操作,我可以从Windows命令提示符或批处理文件中使用类似的操作:

C:> echo password | pass ssh user@host ...
注意事项:

  • ssh
    此处是使用的免费版本安装的。它使用Cygwin DLL,但不需要Cygwin安装
  • 解决方案不需要进一步的依赖关系:它可以从典型的Windows命令提示符或批处理文件中工作
我在寻找上述问题的答案,即使答案是“不可能”。我知道我可以使用键(以及它们的相对优点),或者其他工具,比如Python/Paramiko、PuTTY
plink
等等。我知道我可以在Cygwin的环境中完成。我不想做那些事。。。我需要从一个普通的旧Windows命令提示符或批处理文件中执行此操作,而不会产生额外的依赖项,因为如果可能的话,它将减少现有的依赖项

以下是我到目前为止的情况:

@echo off
echo.%1 | findstr /C:"password">nul
if errorlevel 1 (
  set SSH_ASKPASS="%0"
  set DISPLAY="nothing:0"
  %*
) else (
  findstr "^"
)
我们的想法是将其另存为,比如说
pass.bat
,并像这样使用它:

C:> echo password | pass.bat ssh user@host ...
发生的情况是SSH会话已启动,但仍以交互方式提示输入密码。我认为,从理论上讲,剧本是可以的,因为下面的作品:

C:> echo mypassword | pass.bat pass.bat "password"
mypassword
就目前而言,底层Cygwin DLL应该可以看到Windows环境,因此
SSH\u ASKPASS
的设置应该传播到
SSH

我认为问题在于
ssh
连接到终端。根据
manssh
,如果ssh需要密码短语,那么如果从终端运行,它将从当前终端读取密码短语。这就是为什么我在Linux示例中使用
setsid
。我认为需要一种在Windows中从终端分离进程的方法,但我知道有一种方法(我确实尝试了
start/B

所以我被卡住了——我对脚本窗口的了解不够,不知道什么应该工作。欢迎任何使用本机windows技术(即批处理或powershell)且不需要普通windows上不可用的任何解决方案


该解决方案将由我正在开发的需要使用SSH与外部服务交互的跨平台应用程序使用。当前的原型版本是Python,并且可以作为子流程启动
ssh
。Linux版本已经使用了上述方法,因此我希望Windows解决方案不需要重新编写应用程序。

SSH永远不会从stdin读取密码。我会给出一个shot
sshpass
实用程序,这对于这个任务来说是非常标准的。另一个常见的解决方案是使用
expect
script(在Cygwin上的工作方式应该与在Linux上的工作方式相同)。

我确实说过我知道这些事情,并且我特别想要一个本机windows解决方案,如果有的话。