Я хочу запросить кластер 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, чтобы вы могли подключаться напрямую со своей рабочей станции.