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

Как использовать SSH-туннель с ключами

Доступ к порту 9999 на удаленном сервере должен осуществляться через туннель SSH на локальном порту 9990, чтобы избежать использования брандмауэров.

Я использую эту команду для SSH-туннеля:

ssh -N -i share.pem -L 9990:`ecshare`:9999 ubuntu@`ecshare`

где ecmy содержит ip экземпляра ec2. В качестве основы я могу использовать ssh и получить удаленную оболочку с помощью этой команды:

ssh -i share.pem ubuntu@`ecshare`

Но когда я пробую это в локальной подсказке:

curl -i -X GET http://localhost:9990

Я получаю это на оболочке, в которой был запущен туннель:

channel 2: open failed: connect failed: Connection refused

Когда я пробую эту команду в удаленной оболочке:

curl -i -X GET http://localhost:9999

... Я получаю ответ от сервера.

Почему в соединении отказано?

Несмотря на используемый метод аутентификации, туннелирование SSH работает одинаково. Проблема здесь не в использовании аутентификация с открытым ключом но понимание основ Как использовать SSH-туннелирование.

Ваш -L 9990:example.com:9999 подключается к общедоступному сетевому интерфейсу на удаленной стороне, пока вы подключаетесь к localhost:9999 в твоем curl тест. Брандмауэр, которого вы упомянули, которого следует избегать, вероятно, находится на удаленной стороне, что не позволяет вам использовать http://example.com:9999/ в первую очередь.

Вы должны использовать -L 9990:localhost:9999 вместо этого использовать локальный шлейф.

Эта диаграмма визуализирует вашу ситуацию. В -L [ bind_address:]port:host:hostport...

... работает, выделяя сокет для прослушивания port на локальной стороне, необязательно привязанный к указанному bind_address. При каждом подключении к этому порту соединение пересылается по защищенному каналу, и устанавливается соединение с host порт hostport с удаленной машины.