我使用 Windows10,需要使用 jumphost 才能访问我的 Linux 服务器。因此,我已.ssh\config
按如下方式配置:
Host jumphost
HostName jumphost.server.local
Host server*.server.local
ProxyCommand ssh jumphost netcat -w 120 %h %p
但是当我运行ssh server01.server.local -v
(dash-v 表示详细)时出现以下错误:
OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5
debug1: Reading configuration data C:\\Users\\admin/.ssh/config
debug1: C:\\Users\\admin/ssh/config line 70: Applying options for server*.server.local
debug1: Executing proxy command: exec ssh jumphost netcat -w 120 server01.server.local 22
CreateProcessW failed error:2
posix_spawn: No such file or directory
答案1
按照这个错误,解决方法是使用完整路径。因此,这是正确的行.ssh/config
:
ProxyCommand C:\Windows\System32\OpenSSH\ssh.exe jumphost netcat -w 120 %h %p
如需进一步了解,请参阅此问题:https://github.com/microsoft/vscode-remote-release/issues/18
答案2
总结
应该使用扩展ProxyCommand
名调用 ssh .exe
,例如:
ProxyCommand ssh.exe -q -W %h:%p yyy
长话短说
正在播放的ssh -vvv XXX
节目:
debug3: spawning "C:\\Windows\\System32\\OpenSSH\\ssh -q -W XXX:22 YYY"
CreateProcessW failed error:2
posix_spawn: No such file or directory
根据CreateProcess
MSDN 上的文档,我猜posix_spawn
是以一种参数必须为精确和绝对路径的CreateProcess
方式调用的。指定后缀后,它似乎已修复。lpApplicationName
.exe
答案3
我遇到了同样的错误,但这是因为 DISPLAY 环境变量被设置为某个值。一旦取消设置该环境变量,错误就消失了。
答案4
由于默认系统上没有 netcat,因此 .ssh/config 中的以下两个条目可以解决问题(假设本地用户名和远程用户名不同)。
login.bar
: 系统登录
jump.bar
: jumphost
<username>
: login.bar 和 jump.bar 上的远程用户名(如果它们不同,则需要 <jumpuser>@jump.bar)。如果在 jump.bar 前面省略 <username>@,则使用本地用户名。
A)
Host foo
User <username>
HostName login.bar
ProxyCommand C:\Windows\System32\OpenSSH\ssh.exe -q -X -W %h:%p <username>@jump.bar
b)
Host foo
User <username>
HostName login.bar
ProxyCommand C:\Windows\System32\OpenSSH\ssh.exe -Y <username>@jump.bar -W %h:%p
在这两种情况下,使用以下命令登录 login.bar:ssh foo