Мне часто приходится работать с удалёнными машинками, в большей или меньшей степени изолированными от окружающей сети. К некоторым нет доступа, кроме как по ssh, у других нет доступа во внешнюю сеть, у третьих - и то и другое сразу :). Итак, что же можно сделать, имея только ssh-доступ на удалённую машину?
Получить доступ к любому порту
Например, я хочу подёргать API бэкэнда, висящий на недоступном мне порту 8888 сервера test.server:
Этой командой я говорю: “создай ssh-соединение с хостом test.server под пользователем user” (ssh user@test.server
), “которое будет перенаправлять траффик с порта 8888 моей машины” (-L 8888
) “на порт 8888 удалённой машины” (:localhost:8888
). После этого я спокойно общаюсь с API на порту 8888 моей машины.
Подменить удалённый сервис локальным
Или я собрал у себя новую версию бэкэнда и хочу по-быстрому проверить, как он интегрируется с фронтом на машине test.server:
Этой командой я говорю: “создай ssh-соединение с хостом test.server под пользователем user” (ssh user@test.server
), “которое будет перенаправлять траффик с порта 8888 удалённой машины” (-R 8888
) “на порт 8888 моей машины” (:localhost:8888
). Теперь фронт, который думает, что общается с локальным бэкэндом, на самом деле ведёт диалог с бэкэндом, поднятым у меня.
Кстати, об использовании ssh-тоннелей в автотестах уже писал Кирилл Меркушев на blog.qatools.ru.
Соединить хосты из разных сетей
Не сложно догадаться, что можно соединить два тоннеля и устроить связь между хостами, которые раньше друг друга не видели :).
Поделиться интернетом
Нужно будет поставить у себя прокси или какой-нибудь squid и настроить проксирование стандартных (80/443) портов. После этого прокидываем эти порты к себе на машину и прописываем локальный прокси на удалённой машине.
Править удалённые файлы локально
Кроме сетевых портов, можно прокидывать целую файловую систему с помощью sshfs. Получается что ты работаешь с локальными файлами привычными тебе инструментами, а все твои изменения моментально оказываются на удалённом сервере.
Приятные мелочи
Чтобы не занимать окно терминала висящей сессией, добавь флаг -fN
. N
говорит что ты не будешь посылать в этой сессии команды, а f
отправит процесс в фон. А чтобы не следить за состоянием соединения и автоматически его подымать, используй autossh.
And let the ssh be with you %)!
comments powered by Disqus