Мой файл конфигурации выглядит следующим образом (я пытаюсь напрямую ssh
в foo):
Host foo
HostName <ip>
User <username>
ProxyCommand C:\Windows\System32\OpenSSH\ssh.exe -q -W %h:%p jump
Host jump
HostName <ip>
User <username>
ProxyCommand C:\Windows\System32\OpenSSH\ssh.exe -q -W %h:%p bar
Host bar
HostName <ip>
User <username>
Port <num>
Кроме того, я объединил свой id_rsa.pub
ключ с authorized_keys
серверов bar, jump и foo. Когда я запускаю ssh -J foo jump bar
, я получаю сообщение об ошибке CreateProcessW failed error: 2 posix_spawn: Нет такого файла или каталога
. Когда я пробую ssh foo -v
, я получаю следующее:
OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5
debug1: Reading configuration data C:\\Users\\CCL/.ssh/config
debug1: C:\\Users\\CCL/.ssh/config line 7: Applying options for foo
debug1: Executing proxy command: exec C:\\Windows\\System32\\OpenSSH\\ssh.exe -q -W <jump_ip> jump
debug1: identity file C:\\Users\\CCL/.ssh/id_rsa type 0
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\CCL/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\CCL/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\CCL/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\CCL/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\CCL/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\CCL/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\CCL/.ssh/id_ed25519-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\CCL/.ssh/id_xmss type -1
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\CCL/.ssh/id_xmss-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_for_Windows_7.7
Точно так же, когда я пытаюсь ssh jump -v
, я получаю
OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5
debug1: Reading configuration data C:\\Users\\CCL/.ssh/config
debug1: C:\\Users\\CCL/.ssh/config line 12: Applying options for jump
debug1: Executing proxy command: exec C:\\Windows\\System32\\OpenSSH\\ssh.exe -q -W <bar_ip:port_num> bar
debug1: identity file C:\\Users\\CCL/.ssh/id_rsa type 0
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\CCL/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\CCL/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\CCL/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\CCL/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\CCL/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\CCL/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\CCL/.ssh/id_ed25519-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\CCL/.ssh/id_xmss type -1
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\CCL/.ssh/id_xmss-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_for_Windows_7.7
Кажется, что процесс ssh застрял и никогда не аутентифицируется и не происходит обмен ключами. Как мне это исправить?
Похоже, вы пытаетесь использовать bar
в качестве хоста перехода для подключения к jump
и используете jump
в качестве узла перехода для подключения к foo
.Другими словами, попробуйте подключиться к bar
следующим образом:
local --> foo --> jump --> bar
Ваша конфигурация ssh должна выглядеть так:
Host foo
HostName <ip>
User <username>
ProxyJump jump
Host jump
HostName <ip>
User <username>
ProxyJump bar
Host bar
HostName <ip>
User <username>
Port <num>
А затем, чтобы подключиться, запустите просто ssh bar
.
ProxyJump
— это более простой способ получить то, что вы хотите, по сравнению с ProxyCommand
, если вы используете OpenSSH 7.3 или новее. Кроме того, вам не нужно использовать -J
в команде ssh
. -J
устанавливает ProxyJump
для текущего вызова, который не нужен, если он уже есть в вашем файле конфигурации.