SSH-туннель прерван для разблокировки ключа - Ищу одну команду

SSH-туннель прерван для разблокировки ключа - Ищу одну команду

Я пытаюсь создать туннель ssh для доступа к удаленному серверу (A), доступ к которому возможен только через другой сервер (B). У меня есть ключ на локальной машине (L), чтобы добраться до сервера-ретранслятора (B), и еще один ключ на сервере-ретрансляторе (B), чтобы добраться до сервера назначения (A).

[локальная машина(L) с ключом к серверу ретрансляции(B)] --> [сервер ретрансляции(B) с ключом к серверу назначения (A)] --> [сервер назначения (A)]

У меня на локальной машине есть файл ~/.ssh/config, который выглядит следующим образом:

Host relay.server(B)
    Hostname relay.server
    Port 22
    User me
    IdentityFile ~/.ssh/id_rsa

Host destination.server(A)
    Hostname destination.server
    Port 1122
    User me
    IdentityFile ~/.ssh/id_rsa

И я могу легко заставить свой туннель работать с помощью следующего:

запуск команды: ssh -N -L 1122:SERVER_PRIVATE_IP:22 relay.server(B)на моей локальной машине (L). Это запрашивает у меня пароль для разблокировки первого ключа, а затем, кажется, зависает, не возвращает запрос, использование параметра -fили, заканчивающегося на , &не позволяет мне ввести пароль. Однако, если я ввожу ^Cэту команду после ввода пароля и затем ввожу, ssh destination.server(A)я получаю запрос на ввод пароля для разблокировки второго ключа, после чего я подключаюсь к целевому серверу (A).

Я ищу одну команду, которая позволит мне подключиться к целевому серверу (A) с моей локальной машины (L) и предложит мне ввести пароли, необходимые для разблокировки каждого ключа. Или предложение по альтернативному способу организации вещей, чтобы я мог напрямую подключиться к целевому серверу (A) с моей локальной машины (L) через сервер-ретранслятор (B).

решение1

Короткий ответ: вам нужно

  • ProxyCommandиспользуя ncдля подключения через
  • ForwardAgentпередавать ключи
  • убедитесь, что ваш открытый ключ присутствует .ssh/authorized_keysна всех серверах
Host relay
    Hostname        relay.server.fqdn.or.IP
    User            me
    IdentityFile    ~/.ssh/id_rsa
    ForwardAgent    yes

Host destination
    Hostname        destination.server.fqdn.or.IP
    User            me
    IdentityFile    ~/.ssh/id_rsa
    ProxyCommand    ssh -q relay "nc %h %p"
    ForwardAgent    yes

Более длинная часть.

Опция ProxyCommandв ssh config запускает команду всякий раз, когда Hostиспользуется это включение. Обычно она используется с ncдоступным из nmap.org, также известным как ncatи имеет множество опций.

В приведенной выше Host destinationзаписи конфигурации ssh ProxyCommandбыло установлено значение ssh -q relay "nc %h %p", которое гласит: ssh должен тихо ретранслироваться и запускаться nc destination.server.fqdn.or.IP 22.

ncустанавливает соединение между входящим ssh и пунктом назначения.

Сообщает ForwardAgent yesssh добавить ключ в ssh-agent. Агенты ssh отслеживают ключи и используются для автоматической передачи нужного на хост по мере необходимости. Сообщает ForwardAgent yesагенту передать ключ другому агенту на ретрансляторе, а затем снова в пункт назначения.

Теперь, чтобы все это работало, каждый сервер, через который вы проходите, и в конечном итоге пункт назначения должны иметь открытый ключ, связанный с вашим закрытым ключом (id_rsa) в своем .ssh/authorized_keysфайле. Когда вы создавали свой закрытый ключ, id_rsa, открытый ключ, id_rsa.pub, также должен был быть создан.

Если у вас нет вашего открытого ключа, вы всегда можете получить его из закрытого ключа через ssh-keygen -y -f ~/.ssh/id_rsaдля легкого копирования/вставки. Обратите внимание, что открытый ключ имеет 2 или 3 поля, разделенных пробелами, ноодинлиния.

Итак, ssh relayотредактируйте ~/.ssh/authorized_keys(который может отсутствовать, поэтому mkdir -p ~/.sshможет быть необходим) и вставьте открытый ключ в новую строку (или в первую, если его нет).

Находясь на сервере-ретрансляторе, проверьте, ncсуществует ли он в /bin или /usr/bin. Если его нет, то вам нужно установить его с помощью менеджера пакетов, yum или apt-get.

С сервера-ретранслятора ssh destinationвыполните то же самое обновление ~/.ssh/authorized_keys.

exitполностью на ваш локальный компьютер, и вы сможетеssh destination

решение2

Более новые версии OpenSSH ProxyJumpпозволяют .ssh/config:

Host relay
    Hostname        relay.server.fqdn.or.IP
    User            me
    IdentityFile    ~/.ssh/id_rsa
    ForwardAgent    yes

Host destination
    Hostname        destination.server.fqdn.or.IP
    ProxyJump       relay
    User            me
    IdentityFile    ~/.ssh/id_rsa

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