如何使ssh在WINDOWS上从stdin接收密码
在那里读过书和我的文章之后,我想在Windows上做一件类似的事情 我的Linux解决方案是:如何使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 ...
#!/bin/bash
[[ $1 =~ password: ]] && cat || SSH_ASKPASS="$0" DISPLAY=nothing:0 exec setsid "$@"
如何在Windows上执行类似操作,我可以从Windows命令提示符或批处理文件中使用类似的操作:
C:> echo password | pass ssh user@host ...
注意事项:
此处是使用的免费版本安装的。它使用Cygwin DLL,但不需要Cygwin安装ssh
- 解决方案不需要进一步的依赖关系:它可以从典型的Windows命令提示符或批处理文件中工作
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读取密码。我会给出一个shotsshpass
实用程序,这对于这个任务来说是非常标准的。另一个常见的解决方案是使用expect
script(在Cygwin上的工作方式应该与在Linux上的工作方式相同)。我确实说过我知道这些事情,并且我特别想要一个本机windows解决方案,如果有的话。