Полезности по SSH. Туннель, проброс портов, socks-прокси
Поскольку мне в последнее время приходится каждый день работать по ssh, то хочется поделиться теми вещами, которые мне помогают в работе. Прежде всего надо отметить, что часть отличных возможностей ssh остается в тени. Хотя в мане это все есть. В этот топик буду складывать фичи ssh, ssh туннели, пробросы портов и все что касаемо OpenSSH. Итак:
1. Подключение цепочки. Например host-2 недоступный нам, но находится за host-1, который доступен. Тогда:
ssh -t user@host-1 ssh user@host-2
проходим двойную авторизацию и мы оказываемся на host-2. На самом деле это упрощение что бы не заходить отдельно на host-1. Звеньев цепочки может быть больше двух... Если нужен X Server forwarding, то ключ -X надо писать для каждого хоста. Подробнее об опции -t ниже.
2. Опция -t. Запуск консольного приложения на удаленном хосте в качестве оболочки. Например можно запускать screen, mc, или какое-нибудь собственное меню.
ssh -t user@host mc
Запустит Midnight Commander, при выходе из него сессия оборвется.
3. Проброс порта удаленного хоста на локальный порт. Пример: есть веб-сервер host-2 в частной сети, есть ssh доступ к host-1, который находится в одной сети (или имеет доступ к host-2), нам надо залезть на этот веб-сервер:
sudo ssh -L 8888:host-2:80 user@host-1
Именно с правами рута, после этого веб-сервер host-2 будет доступен у нас, localhost:8888
4. Проброс локального порта c хоста на нашей стороне на удаленный хост. То есть допустим, надо на удаленном host-2 открыть веб-сервер host-1 который доступен только нам.
sudo ssh -R 8888:host-1:80 user@host-2
И на host-2 на localhost:8888 будет проброшен веб-сервер host-1
5. Проброс удаленных GUI приложений на локальный X Server.
ssh -X user@host
для этого в /etc/ssh/sshd_config должна быть опция: X11Forwarding yes (В Debian/Ubuntu включена по дефолту) На локальном компьютере должен быть установлен и запущен X Window System. В Windows — Xming, в MacOS — XQuartz.
6. Динамический проброс. Ситуация: необходим прокси-сервер, или нужда поработать с сервисами в закрытой удаленной сети, находящейся за host.
sudo ssh -D 777 user@host
И тогда на localhost:777 будет работать socks сервер, который соответственно работает с окружением удаленного хоста host, поверх ssh соединения.
7. Копирование файла поверх SSH
Файл source-file c локального хоста на удаленный host-1:
scp source-file user@host-1:~/
Файл с удаленного хоста host-1 на локальный, неудобство в том, что нужно знать точный путь файла-источника:
scp user@host-1:~/source-file file
На сегодня все. Позже еще добавлю про поднятие ssh туннелей, как их сам опробую :)

