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