S SH Переадресация портов / туннелирование с несколькими прыжками - PullRequest
0 голосов
/ 02 апреля 2020

SSH-Tunneling

Фон

  • В AZ существует три подсети в AWS. Два из них являются частными, а один - publi c.
  • Publi c Su bnet имеет Jumpbox, к которому можно подключиться с моей локальной машины через ssh, используя файл pem (пример - ssh -i my-key-file.pem ec2-user@host1

  • Первый приватный su bnet имеет экземпляр EC2, который действует как сервер приложений. Доступ к нему возможен только через Jumbox через ssh. Здесь используется тот же файл pem (пример - ssh -i my-key-file.pem ec2-user@host2). Эта команда выполняется на host1.

  • Во втором частном su bnet размещается Oracle Экземпляр с использованием службы AWS RDS. Он работает на порту 1521. Доступ к БД возможен только с сервера приложений / host2.

Как я работаю в настоящее время

  • host2 имеет sqlplus установленный клиент.

  • Сначала я подключаюсь к host1, затем к host2, а затем выполните sqlplus для выполнения запросов в командной строке (№ GUI).

Я планирую использовать GUI инструменты, такие как SQL Developer для подключиться прямо от моего л машина Я думал, используя переадресацию портов / S SH Tunneling Это может быть достигнуто.

Я пытался использовать разные варианты, но безуспешно. Полезны следующие ссылки:

Мой подход к S SH Туннелирование

  • ssh -N -L 9999:127.0.0.1:1234 ec2-user@host1 -i my-key-file.pem -v -v -v
    • Это выполняется на моей локальной машине.
    • Это не так много, как Я уже могу подключиться к host1, используя ssh. Я не знал, как продвинуть много уровней. Используя этот хост как мой первый прыжок. После этого ssh прослушивает порт 9999, который Local для моей машины. Он передает любой трафик c на host1 в порт 1234. Я предполагаю, что, если я использую sqlplus на своей локальной машине, подключающейся к localhost:9999, трафик c достигнет host1:1234
    • Я использовал 127.0.0.1, потому что цель туннелирования S SH относится к серверу S SH, который является host1. По сути, оба Target , S SH Сервер находятся на одном хосте.
  • ssh -N -L 1234:db-host:1521 ec2-user@host2 -i my-key-file.pem -v -v- v

    • Это выполняется на host1
    • После этого s sh перенаправляет любой входящий трафик c через порт 1234 на целевой хост (хост DB) / 1521, используя host2 как Туннель.

    • Опять же, я предполагаю, что ssh прослушивает порт 1234 на host1. Любой трафик c, поступающий откуда-либо, будет доставлен на DB Host с использованием host2 в качестве туннеля.

Я выполнил обе команды и не увидел ни одной ошибка. Я проверил, какие порты прослушивают, используя netstat -tulpn | grep LISTEN.

После этих двух я планировал подключиться к базе данных, используя имя хоста как localhost и номер порта как 9999.

Что не так!

  • Но когда я пытаюсь подключиться к БД с моей локальной машины, появляется сообщение об ошибке от моего SQL клиента Получил минус один из прочитанного звонка . Я не мог понять сообщения отладки из журналов s sh.

Я считаю, что мое понимание того, как работает переадресация портов, может быть неверным. Любые входные данные будут полезны. Спасибо за ваше время!

...