我正在尝试在 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
并且都有效git
。connect.exe
Windows
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