簡體   English   中英

在 Windows 上使用 Cygwin 的 SSH ControlMaster 實際上可能嗎?

[英]Is SSH ControlMaster with Cygwin on Windows actually possible?

有沒有人能夠在 Windows 上使用帶有 cygwin 的 control master 來創建多個會話而無需重復登錄? 我需要自動執行一系列 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

我見過其他人有這個問題,但我似乎找不到任何解決方案。

有沒有人做過這個工作?

顯然,經過多次搜索后的結論是,目前這是不可能的。 這些是我發現的唯一處理此問題的鏈接:

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 域套接字傳遞文件描述符。”

對於 Cygwin 似乎仍然不可能,但在 Windows 中,它是可能的。 我使用 wsl-ssh-pageant 和 Windows Ubuntu Bash/WSL 在 Windows 中進行了這項工作)。

在 bash 下安裝 socat。 然后按照說明運行 wsl-ssh-pageant,然后使用 while 循環並導出。 如果您在 .ssh 下正確設置了 controlmaster 並且創建了 ControlPath 目錄,則應該可以使用。

錯誤 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 <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

指定遠程命令后,不會發生錯誤。

不,不是 Cygwin、OpenSSH 或 Dropbear - 但在 Windows 上還有另一種輕量級 ssh 多路復用選項:PuTTY 支持“如果可能,共享 SSH 連接”

在此處輸入圖片說明

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

SSH 多路復用大大降低了初始連接延遲,因為初始握手已經發生。 從技術上講,在 Cygwin 上實現完整的 UNIX 套接字功能應該是可能的——而且是有用的——但正確地做到這一點會有些困難。 有些功能是存在的,但它不太可能是安全的,它是一個黑客,請參閱MSYS/Cygwin 使用什么機制來模擬 Unix 域套接字?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM