Назад | Перейти на главную страницу

Windows 10 ssh proxycommand: «posix_spawn: Нет такого файла или каталога»

Я использую Windows 10, и мне нужно использовать узел перехода, чтобы добраться до моих серверов 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 (тире-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

Согласно эта ошибка, исправление заключается в использовании полного пути. Итак, это правильная строка в .ssh/config:

  ProxyCommand  C:\Windows\System32\OpenSSH\ssh.exe jumphost netcat -w 120 %h %p

Для дальнейшего развития см. Этот выпуск: https://github.com/microsoft/vscode-remote-release/issues/18

TL; DR

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 суффикс, вроде бы исправлено.

У меня такая же ошибка, но это из-за того, что для переменной среды DISPLAY установлено какое-то значение. Как только вы сбросите эту переменную среды, ошибка исчезнет.

Эта проблема связана с ошибкой в ​​реализации OpenSSH для Windows. Эта ошибка исправлена ​​в версии 8.1.0.0. Подробные инструкции по исправлению версии можно найти Вот

Поскольку netcat недоступен в системе по умолчанию, следующие две записи в .ssh / config помогут (при условии, что имя локального пользователя и имя удаленного пользователя различны).

login.bar : система для входа
jump.bar : jumphost
<username> : имя удаленного пользователя на login.bar и jump.bar (если они разные, требуется <jumpuser> @ jump.bar). Если вы опустите <username> @ перед jump.bar, будет использовано локальное имя пользователя.

а)

Host foo
User <username>
HostName login.bar
ProxyCommand C:\Windows\System32\OpenSSH\ssh.exe -q -X -W %h:%p <username>@jump.bar

б)

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