Назад | Перейти на главную страницу

запросить Redshift через несколько переходов SSH

Я хочу запросить кластер AWS Redshift из среды IDE, работающей на моем ноутбуке (IntelliJ). Этот кластер доступен напрямую только из экземпляра EC2 в нашем VPC.

Этот экземпляр EC2 недоступен напрямую с моего ноутбука: необходимо ssh на другой сервер в нашем центре обработки данных, а затем ssh к экземпляру EC2 в нашем VPC для выполнения запросов в кластере Reshift через psql клиент. Другие пользователи и cronСкрипты оболочки d также выполняют команды в этом кластере из того же экземпляра EC2.

Я хотел бы настроить SSH-туннель от моего ноутбука через промежуточный сервер в нашем центре обработки данных до экземпляра EC2 и, в конечном итоге, до кластера Redshift, не затрагивая других пользователей / скрипты.

Я пробовал это:

ssh -fNL 5439:localhost:22 host_in_datacenter ssh -fNL 22:localhost:22 ec2_instance ssh -fNL 22:localhost:5439 reshift_host

Что вернулось:

[08P01] Protocol error.  Session setup failed.

... когда я пытаюсь подключиться через клиента.

В большинстве примеров цепочки SSH для доступа к удаленным базам данных, которые я видел, есть только один переход к хосту, на котором запущена база данных, а последний переход заканчивается на самом хосте базы данных.

Можно ли создать SSH-туннель, не затрагивая других пользователей, от моего ноутбука до кластера Redshift? Если да, то видите, что я делаю не так?

Похоже, вы не понимаете синтаксис пересылки SSH. Пожалуйста, не принимайте это на свой счет, но это яркий пример того, почему копирование / вставка программного обеспечения и системное администрирование так опасно. Люди находят в Интернете примеры того, как что-то делать, не утруждая себя исследованием того, что на самом деле происходит.

Разберем часть вашей команды:

ssh -fNL 5439:localhost:22 host_in_datacenter

Это значит принять трафик localhost:5439 и перенаправьте его на порт 22 на сервере, к которому вы подключены. Это не имеет никакого смысла и никогда не сработает, поскольку это SSH-сервер, прослушивающий порт 22, который не знает, что делать с трафиком, отличным от SSH.

Что ты хочешь сделать, так это выбрать другой случайный высокий порт и используйте его для передачи трафика через вашу цепочку. Что-то вроде этого:

ssh -fNL 5439:localhost:12345 host_in_datacenter ssh -fNL 12345:redshift_host:12345 ec2_instance

Честно говоря, это довольно неуклюже. На вашем месте я бы свернул вашу сеть, поэтому вам нужно было бы пройти только через один хост, чтобы добраться до Redshift. или настройте VPN в AWS, чтобы вы могли подключаться напрямую со своей рабочей станции.