Windows 上的 SSH ControlMaster 与 Cygwin 真的可行吗?

问题描述 投票:0回答:4

有谁能够在 Windows 上使用 control master 配合 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

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

有人做过这个作品吗?

windows ssh cygwin ssh-multiplexing
4个回答
30
投票

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

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

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


5
投票

Bug 1278 - CYGWIN controlMaster 连接不起作用。 描述了自 2016 年 12 月起在 Cygwin 下部分实现的 ControlMaster/ControlPersist 的使用,但有一个限制,即它仅适用于远程命令,不适用于需要伪的连接终端。

虽然这个答案没有在 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 <[email protected]>
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

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


4
投票

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

在 bash 下安装 socat。然后按照提示运行 wsl-ssh-pageant,然后使用 while 循环并导出。如果您在 .ssh 下正确设置了 controlmaster 并且创建了 ControlPath 目录,则应该可以工作。


1
投票

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

如果您需要控制台版本,我建议您按照此列表进行操作:https://en.wikipedia.org/wiki/Comparison_of_SSH_clients#Platform

SSH 多路复用大大降低了初始连接延迟,因为初始握手已经发生。从技术上讲,在 Cygwin 上实现完整的 UNIX 套接字功能应该是可能的并且有用的,但是正确地实现它会有些困难。一些功能是存在的,但它不太可能是安全的,而且是一种 hack,请参阅 MSYS/Cygwin 使用什么机制来模拟 Unix 域套接字?

© www.soinside.com 2019 - 2024. All rights reserved.