1

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

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

У меня есть файл ~/.ssh/config, который выглядит так на моей локальной машине (L):

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 ответ1

0

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

  • 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 запускает команду всякий раз, когда используется этот Host . Обычно он используется с nc доступным с nmap.org, также известным как ncat и имеет много опций.

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

nc устанавливает соединение между ssh и получателем.

ForwardAgent yes указывает ssh добавить ключ в 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .