windows 10 ssh 代理命令:“posix_spawn:没有这样的文件或目录”

windows 10 ssh 代理命令:“posix_spawn:没有这样的文件或目录”

我使用 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

根据CreateProcessMSDN 上的文档,我猜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

相关内容