web-dev-qa-db-fra.com

windows 10 ssh proxycommand: "posix_spawn: aucun fichier ou répertoire de ce type"

J'utilise Windows10 et je dois utiliser un jumphost pour accéder à mes serveurs Linux. J'ai donc configuré mon .ssh\config ainsi:

Host jumphost
HostName jumphost.server.local

Host server*.server.local
ProxyCommand  ssh jumphost netcat -w 120 %h %p

Mais quand je lance ssh server01.server.local -v (tiret-v pour verbeux) J'obtiens l'erreur suivante:

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
16
Chris

Selon ce bug , le correctif consiste à utiliser un chemin complet. C'est donc la ligne correcte dans le .ssh/config:

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

Pour plus d'informations, consultez ce problème: https://github.com/Microsoft/vscode-remote-release/issues/18

14
Chris

TL; DR

ProxyCommand ssh.exe -q -W %h:%p yyy

La longue (?) Histoire

Fonctionnement ssh -vvv XXX montre:

debug3: spawning "C:\\Windows\\System32\\OpenSSH\\ssh -q -W XXX:22 YYY"
CreateProcessW failed error:2
posix_spawn: No such file or directory

Selon CreateProcess document sur MSDN, je suppose que posix_spawn appelle CreateProcess d'une manière telle que l'argument lpApplicationName doit être un chemin exact et absolu. Après avoir spécifié le .exe suffixe, il semble être corrigé.

7
Ben

J'ai eu la même erreur mais c'était à cause de la variable d'environnement DISPLAY définie sur une certaine valeur. Une fois que vous avez désactivé cette variable d'environnement, l'erreur a disparu.

1
Shital Shah

Étant donné que netcat n'est pas disponible sur un système par défaut, les deux entrées suivantes dans le fichier .ssh/config feront l'affaire (en supposant que le nom d'utilisateur local et le nom d'utilisateur distant sont distincts).

login.bar: système pour se connecter
jump.bar: jumphost
<username>: nom d'utilisateur distant sur login.bar et jump.bar (s'ils sont distincts <jumpuser> @ jump.bar est nécessaire). Si vous omettez <username> @ devant jump.bar, le nom d'utilisateur local est pris.

une)

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 

Dans les deux cas, connectez-vous à login.bar avec: ssh foo

0