SSH встроенный прокси-переход с использованием ключей не работает

SSH встроенный прокси-переход с использованием ключей не работает

Мне нужно установить соединение с удаленным сервером через proxy jump. Я пытаюсь использовать флаг -J для этого. Я понимаю, что синтаксис выглядит так:

ssh -J A B

Но мне нужно использовать файлы ключей для обоих подключений. Поэтому я попробовал это:

ssh -J -i /path/proxy.pem user@proxy_host -i /path/target.pem user@target_host

Очевидно, это не работает, я получаю

option requires an argument -- i
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-E log_file] [-e escape_char]
           [-F configfile] [-I pkcs11] [-i identity_file]
           [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec]
           [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]
           [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
           [user@]hostname [command]
ssh_exchange_identification: Connection closed by remote host

Какой правильный синтаксис inline в этом случае, без редактирования настроек ssh? В этом случае нет разницы, на каком сервере хранятся ключи.

решение1

Я понимаю, что синтаксис выглядит так:

ssh -J A B

Да, но это еще не все. -J— это не отдельный флаг — он не позволяет вам просто указать два независимых набора параметров подключения в одной командной строке, как вы пытаетесь сделать.

Вместо этого -Jфлаг берет имя промежуточного хоста.как параметр, поэтому, как -i <keyfile>всегда идут вместе, -J <proxy>так и должны оставаться вместе.

И даже если вы используете эту опцию, общий синтаксис 'ssh' не меняется — по-прежнему нет группировки того, какие опции относятся к хосту A, а какие — к хосту B. Если у вас есть две такие опции '-i', SSH просто попытаетсяобаключи при выполнении каждого из двух подключений.

Однако последняя часть не должна быть проблемой, поскольку каждый сервер просто укажет, что не принимает ключ, и SSH попробует другой. Поэтому следующее должно сработать:

ssh -J user@proxy_host -i /path/proxy.pem -i /path/target.pem user@target_host
    └────────────────┘ └────────────────┘ └─────────────────┘

Но если одному из хостов не нравится тот факт, что пробуются несколько ключей, вам придется преобразовать -J в длинную форму ProxyCommand:

ssh -o ProxyCommand="ssh -i /path/proxy.pem -W %h:%p user@proxy_host" -i /path/target.pem user@target_host

Связанный контент