在Windows上使用Cygwin的SSH ControlMaster实际上是否可行?

时间:2014-01-06 21:41:00

标签: windows ssh cygwin

有没有人能够在Windows上使用带有cygwin的控制主机来创建多个会话而无需重复登录?我需要自动执行一系列SSH步骤,但不能要求用户每次都输入所需的标记密码。

我已经使用以下命令配置了我的cygwin ssh_config:

Host *
    ControlMaster auto
    ControlPath /tmp/%r@%h:%p

当我开始第二次连接再次提示输入密码时,我在主服务器上收到以下错误消息:

mm_receive_fd: no message header
process_mux_new_session: failed to receive fd 0 from slave

我见过其他人遇到过这个问题,但我似乎找不到任何解决办法。

有人做过这项工作吗?

4 个答案:

答案 0 :(得分:22)

显然,经过多次搜索后得出的结论是,目前这是不可能的。这些是我发现处理这个问题的唯一链接:

https://stackoverflow.com/questions/17140457/imitating-a-shared-ssh-session-for-scripts-on-windows     “...但是没有OpenSSH for Windows的实现(unix套接字上的文件描述符在Cygwin中不起作用)。” 和

http://gcc.gnu.org/wiki/SSH_connection_caching     “不幸的是,如果你在Cygwin上使用OpenSSH,你将无法利用连接缓存,因为Cygwin目前不支持通过unix-domain套接字传递文件描述符。”

答案 1 :(得分:3)

对于Cygwin,它似乎仍然不可能,但在Windows中,它是可能的。我使用wsl-ssh-pageant和Windows Ubuntu Bash / WSL在Windows中工作。

在bash install socat下。然后按照说明运行wsl-ssh-pageant,然后使用while循环并导出。如果你的控制主机在.ssh设置正确并且创建了ControlPath的目录,那么应该可以工作。

答案 2 :(得分:2)

Bug 1278 - CYGWIN controlMaster connections don't work.描述了ControlMaster / ControlPersist的使用,该方法在Cygwin下已于2016年12月部分实现,但有一个限定条件,即它仅适用于远程命令,不适用于需要伪终端的连接。

虽然在Cygwin本身尚未确认此答案,但对于MSYS2(基于Cygwin),它被确认为是。 MSYS2下的openssh支持远程命令的ControlMaster / ControlPersist连接,但不支持交互式会话。

$ cygcheck -V | head -3
cygcheck (msys) 3.0.7
System Checker for Msys
Copyright (C) 1998 - 2019 Cygwin Authors

$ ssh -V
OpenSSH_8.1p1, OpenSSL 1.1.1d  10 Sep 2019

$ pacman -Qi openssh
Name            : openssh
Version         : 8.1p1-1
Description     : Free version of the SSH connectivity tools
Architecture    : i686
URL             : https://www.openssh.com/portable.html
Licenses        : custom:BSD
Groups          : net-utils
Provides        : None
Depends On      : heimdal  libedit  libcrypt  openssl
Optional Deps   : None
Required By     : sshpass
Optional For    : None
Conflicts With  : None
Replaces        : None
Installed Size  : 4.55 MiB
Packager        : Alexey Pavlov <alexpux@gmail.com>
Build Date      : Mon, Oct 14, 2019 1:12:28 AM
Install Date    : Thu, Oct 24, 2019 8:38:48 PM
Install Reason  : Explicitly installed
Install Script  : No
Validated By    : Signature

在未指定远程命令的情况下运行ssh时会发生以下错误:

mm_send_fd: sendmsg(2): Broken pipe
mux_client_request_session: send fds failed

指定远程命令后,不会发生错误。

答案 3 :(得分:0)

不,不是 Cygwin、OpenSSH 或 Dropbear - 但 Windows 上还有另一种轻量级 ssh 多路复用选项:PuTTY 支持“如果可能,共享 SSH 连接”

enter image description here

如果您需要控制台版本,我建议您按以下方式操作:https://en.wikipedia.org/wiki/Comparison_of_SSH_clients#Platform

SSH 多路复用大大降低了初始连接延迟,因为初始握手已经发生。从技术上讲,在 Cygwin 上实现完整的 UNIX 套接字功能应该是可能的——而且是有用的——但正确地做到这一点会有些困难。一些功能是存在的,但它不太可能是安全的,它是一种黑客行为,请参阅 What mechanism is used by MSYS/Cygwin to emulate Unix domain sockets?