Windows 上的 OpenSSH 配置文件 - ProxyCommand 不起作用

Windows 上的 OpenSSH 配置文件 - ProxyCommand 不起作用

我正在尝试在 Windows 上使用 OpenSSH ProxyCommand 通过设备 1 连接到设备 2。设备 2 请求 xxxxx 端口转发,无需 ProxyCommand 的连接即可正常工作(但需要先连接到设备 1,然后再连接到设备 2,我想要简单的一步连接)。

我已经创建了 C:\Program Files\OpenSSH\etc\ssh_config 文件,如下所示:

Host device1
Hostname xxx.xxx.xx.xx
User root

Host device2
ProxyCommand ssh -q device1 nc -q0 localhost xxxxx

现在当我输入

ssh user@device2

我明白了

/bin/sh: No such file or directory
write: Broken pipe

我已经在 Linux 操作系统上检查过了,运行正常。你能解释一下我可能犯了什么错误吗?

此外,我还尝试在 C:\Program Files\OpenSSH\home\user\.ssh\config 中创建配置并得到了相同的结果。

当我删除配置文件时我得到

ssh: Could not resolve hostname device2: Name or service not known

因此该文件似乎已被检测到。

我正在使用 OpenSSH_7.6p1、OpenSSL 1.0.2k 2017 年 1 月 26 日和 Windows 10

答案1

我今天为此苦苦挣扎,因为我想ProxyJump在 Windows 中使用。问题似乎是 Windows 中的 openssh 可能会调用错误的 ssh,这对我来说不起作用。

λ ssh.exe -v target-via-pj
OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5
debug1: Reading configuration data C:\\Users\\nico/.ssh/config
debug1: C:\\Users\\nico/.ssh/config line 41: Applying options for target-via-pj
debug1: Setting implicit ProxyCommand from ProxyJump: ssh -v -W '[%h]:%p' my-proxy
debug1: Executing proxy command: exec ssh -v -W '[XXX.XXX.XXX.XXX]:22' my-proxy
CreateProcessW failed error:2
posix_spawn: No such file or directory

对我而言,有效的方法是明确指定 ProxyCommand。这是我在 Windows 中对代理和目标的定义。

Host my-proxy
        HostName 192.168.66.22                 
        User user                              
        IdentityFile ~/.ssh/id_rsa

Host target-via-pj
          Hostname XXX.XXX.XXX.XXX          
          User user
          ProxyCommand ssh.exe -W %h:%p proxy
          IdentityFile ~/.ssh/id2_rsa     

这导致:

λ ssh.exe -v target-via-pj                                                                      
OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5                                                     
debug1: Reading configuration data C:\\Users\\nico/.ssh/config                               
debug1: C:\\Users\\nico/.ssh/config line 41: Applying options for target-via-pj                
debug1: Executing proxy command: exec ssh.exe -W XXX.XXX.XXX.XXX:22 proxy
debug1: key_load_public: No such file or directory                                            
debug1: identity file C:\\Users\\nico/.ssh/id_rsa type -1                                  
debug1: key_load_public: No such file or directory                                            
debug1: identity file C:\\Users\\nico/.ssh/id_rsa-cert type -1                             
debug1: Local version string SSH-2.0-OpenSSH_for_Windows_7.7                                  
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.6p1 Ubuntu-4ubuntu0.3  
debug1: match: OpenSSH_7.6p1 Ubuntu-4ubuntu0.3 pat OpenSSH* compat 0x04000000                 
debug1: Authenticating to XXX.XXX.XXX.XXX:22 as 'user'                                       

希望有帮助!

答案2

对于 Windows 10 1903 和https://nmap.org/,ProxyCommand 应该可以正常工作,我想你现在就可以这样做,下面是 HTTP 代理的示例命令,希望这能给你一些帮助,

ssh [email protected] -o "ProxyCommand C:\Program Files (x86)\Nmap\ncat.exe --verbose --proxy-type http --proxy 127.0.0.1:10801 %h %p" -v

完整日志:

C:\Users\xxx>ssh xxx.xxx -p 22 -o "ProxyCommand C:\Program Files (x86)\Nmap\ncat.exe --verbose --proxy-type http --proxy 127.0.0.1:10801 %h %p" -v
OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5
debug1: Reading configuration data C:\\Users\\xxx/.ssh/config
debug1: C:\\Users\\xxx/.ssh/config line 2: Applying options for xxx.xxx
debug1: Executing proxy command: exec C:\\Program Files (x86)\\Nmap\\ncat.exe --verbose --proxy-type http --proxy 127.0.0.1:10801 xxx.xxx 22

答案3

好的,所以我认为我已经解决了这个问题,尽管我的问题尚未解决,因为它不可能解决。

根据我的研究并感谢https://superuser.com/users/213663/martin-prikryl我了解到,Windows 版 OpenSSH 没有支持 ProxyCommand(至少我找不到,但他们的网站上有这样的信息)。

我得到的原因:

/bin/sh: No such file or directory
write: Broken pipe

是因为 OpenSSH 构建不好。我从

https://sourceforge.net/projects/sshwindows/

根据那里的评论,这个版本有问题!请不要使用它!在我卸载这个 OpenSSH 并从网站(或从 Windows 10 可选功能)安装了官方版本后,我得到了正确的错误:

Proxy connect is not supported in Windows yet

答案4

我同时使用和HTTP proxy和,socks5 proxy并且都有效gitconnect.exeWindows

Host  company
  HostName  dest.company.com
  User git
  ProxyCommand connect -H mydomain.com:10001 %h %p

对于你的情况,以下可能有效

Host device1
    Hostname xxx.xxx.xx.xx
    User root

Host device2
    ProxyCommand ssh device1 connect %h %p 

只要检查一下这个线索,https://github.com/gotoh/ssh-connect?tab=readme-ov-file#break-the-more-restricted-wall

相关内容