Может кто-нибудь объяснить SSH туннель простым способом?
Хотя я использую некоторый псевдоним для туннеля ssh
или обратного туннеля, я никогда не понимаю, как он работает. Кто-нибудь знает, как объяснить это очень простым способом?
Я думаю, что 3 основных использования:
Во-первых, я могу использовать свой домашний компьютер для ssh до foo.mycompany.com
, не используя никаких паролей
(foo
- сервер на работе)
1) Как сделать foo.mycompany.com:8080
перейти на мой домашний компьютер localhost:3000
?
2) Если у меня дома, я не могу получить доступ к http://bar.mycompany.com
, но foo
может получить доступ к bar
, как сделать домашний компьютер доступным для http://bar.mycompany.com
?
3) Если у меня дома, я не могу получить доступ к MySQL db в db.mycompany.com
, но foo
может, как сделать возможным доступ к db.mycompany.com
, также используя туннель ssh
.
Можно ли это объяснить очень просто? Есть ли еще какое-то другое популярное использование помимо этих 3? спасибо.
Ответы
Ответ 1
1) Предполагая, что вы подключаетесь из дома в foo, вам нужен обратный туннель (-R)
ssh -R 8080:localhost:3000 foo.mycompany.com
Это позволит процессам, запущенным на foo, подключаться к localhost:8080
и фактически разговаривать с вашим домашним компьютером на порту 3000. Если вы хотите, чтобы другие компьютеры на вашей работе могли подключиться к foo: 8080 и получить доступ к вашему домашнему компьютеру по адресу порт 3000, тогда вам нужно
ssh -R 0.0.0.0:8080:localhost:3000 foo.mycompany.com
но для этого вам также понадобится этот параметр для foo sshd_config
GatewayPorts yes
2) Лучший способ создать http-прокси с ssh - с носками. Сначала подключитесь к
ssh -D 8888 foo.company.com
затем перейдите к настройкам соединения с браузером и включите прокси-соединение, выберите socks4/5 и host: localhost, порт 8888. Затем просто введите http://bar.mycompany.com
в адресную строку вашего браузера.
3) Теперь вам нужен локальный порт вперед (-L).
ssh -L 3333:db.mycompany.com:3306 foo.mycompany.com
Это означает, что вы сможете подключиться к localhost:3333
со своего домашнего компьютера, и все будет перенаправлено на db.mycompany.com:3306
, как если бы соединение было выполнено с помощью foo.mycompany.com
. Host db увидит foo как соединение с клиентом, поэтому вам нужно войти в систему с тем же именем пользователя и паролем, который вы используете при работе с foo.
Добавление флага -g позволит другим компьютерам из вашей домашней сети подключиться к вашему компьютеру через порт 3333 и фактически получить доступ к db: 3306.
Ответ 2
SSH-туннелирование очень простое. Он открывает гнездо для прослушивания на одном конце. Всякий раз, когда кто-либо подключается к этому прослушивающему сокету, он открывает соответствующее соединение с другого конца в сконфигурированное местоположение, а затем пересылает всю информацию между двумя способами по ссылке SSH.
Ответ 3
Прежде всего, я объясню SSH:
SSH - это удаленная оболочка входа, которая помогает вам подключать удаленные компьютеры с помощью зашифрованного подключения. Поэтому, когда вы подключили ssh к любому удаленному хосту, соединение между хостами безопасно и зашифровано.
SSH-туннелирование маршрутизирует ваш трафик через безопасное соединение SSH.
Простыми словами SSH-туннелирование - это не что иное, как одно соединение, инкапсулированное другим соединением. Принимая это как преимущество, мы создаем туннели с помощью SSH-клиента.
Следующая команда поможет вам создать простой прокси-сервер socks
ssh -D 8080 [email protected]
Ответ 4
Довольно старый вопрос, но посмотрите, поможет ли эта страница вам это объяснить, там есть красивые картинки и все такое. :)
https://www.ssh.com/ssh/tunneling/
По сути, SSH Tunnel - это туннель, который может использоваться для передачи (туннелирования) данных из одного места в другое в зашифрованном виде.
Он также обычно используется для маршрутизации трафика (через туннель, думаю, червоточина) куда-то еще, что позволяет выполнять такие вещи, как туннелирование через брандмауэр или перенаправление трафика (переадресация зашифрованных портов).
Допустим, у вас есть межсетевой экран между вами и сервером. Сервер может получить доступ к другому серверу (server2) в своей внутренней сети.
[client]--------||------[server]----[sever2]
Допустим, вы хотите получить доступ к веб-серверу на сервере server2, и по понятным причинам вы не можете сделать это напрямую. Допустим, порт 22 (ssh) открыт на брандмауэре. Итак, что мы будем делать, это создать SSH-туннель (на сервере) от сервера к серверу2. Это будет означать, что любой (исходящий?) Трафик через порт 22 будет передаваться через этот туннель с сервера: 22 → сервер2: 80.
[client]--------||------[server:22]======[sever2:80]
Поэтому (насколько я понимаю), если мы подключимся к серверу: 22, он должен перенаправить трафик через порт 22 на веб-сервер на server2:80
используя этот новый туннель SSH. (Насколько я понимаю, данные зашифрованы только в туннеле, поэтому конец будет расшифрован данными, если вам интересно, если сервер: 80 должен быть SSL).
Я предполагаю, с одной стороны, что использование SSH само по себе является туннелем SSH для вашей старой связи telnet
. Просто в большинстве случаев, когда вы слышите о SSH-туннелировании, люди обращаются к (безопасной) функции переадресации портов, которую он предлагает, без необходимости иметь доступ к администратору брандмауэра, которая является изящной маленькой функцией, которую многие хакеры любят использовать обойти безопасность.
По более законным причинам; Это отличный способ передать определенный трафик на внутренний сервер, который работает на другом порту, если вы ограничены брандмауэром и т.д., или вы хотите защитить трафик между двумя компьютерами (как это делает программа SSH).
Надеюсь это поможет.
РЕДАКТИРОВАТЬ
Вы можете найти это в UNIX SO https://unix.stackexchange.com/questions/46235/how-does-reverse-ssh-tunneling-work, множество ответов с очень четкими (и наглядными) объяснениями того, что вам нужно!
Ответ 5
Я наткнулся на эту ссылку, которая была очень полезна. https://chamibuddhika.wordpress.com/2012/03/21/ssh-tunnelling-explained/
Ответ 6
Прочтите справочную страницу, в частности опции -L, -R и -D. Я не думаю, что кто-то переписывает это и, возможно, вводит ошибки, полезен. Если вы не понимаете этого, хотя можете задать более конкретные вопросы.
-D дает прокси SOCKS, что является еще одним полезным применением ssh-туннелирования.