Добрый день.
Столкнулся на рабочем месте с необходимостью подключения к своей домашней тачке по SSH через прокси.
Нашел решение, делюсь с теми, кто столкнулся с подобным.
Итак, дано:
1. Рабочая тачка (ubuntu-6.10-edgy, 2.6.17-11-generic) с доступом к HTTP(S)-прокси, поддерживающему метод CONNECT!
2. Домашняя тачка (ubuntu-server-6.06, 2.6.15-28-server) с честным айпишником и поднятым SSHD.
Дополнительные ограничения: через прокси разрешен пропуск только 80-го порта.
Первое, что пришло в голову - решить проблему с несоответствием портов в лоб, т.е. перевести SSHD на 80-й порт и оставить его так. Веб-сервера у меня нет и не планируется, но если будет желание, то можно будет SSHD перевесить обратно на 22-й и настроить проброску порта через iptables. Но пока такой задачи не стоит, поэтому идем по пути минимального сопротивления и делаем так...
1. Правим /etc/ssh/sshd_config, вместо "Port 22" пишем "Port 80"
2. Перезапускаем SSHD
pk@mainframe:~$ sudo /etc/init.d/ssh restart
* Restarting OpenBSD Secure Shell server... [ ok ]
Теперь SSHD готово принимать подключение на 80-м порту.
3. Для подключения через HTTP и туннелирования трафика нам понадобится программа
PROXYTUNNEL (
http://proxytunnel.sourceforge.net/). Качаем, разворачиваем архив.
4. Для компиляции программы понадобится пакет libssl-dev (кстати, об стом ни в одной доке на proxytunnel не написано, тем временем как при сборке программы скрипт настойчиво требует исходники openssl и без них прогу не собирает), поэтому ставим его незамедлительно.
pk@mainframe:~$sudo apt-get install libssl-dev
5. Собираем proxytunnel
pk@mainframe:~/proxytunnel-1.6.3$ make
pk@mainframe:~/proxytunnel-1.6.3$ make install
Теперь нужно научить SSH ходить через proxytunnel при обращении к моей домашней тачке. Делается это так.
6. Создаем файл config в ~/.ssh/
pk@mainframe:~$ touch ~/.ssh/config
7. Пишем в config следующее
Host home
ProxyCommand proxytunnel -v -p proxy:8080 -u user -d -p pass home:80 -H "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32)"
, где proxy - имя вашего прокси-сервера, user - логин на прокси, pass - пароль на прокси, home - адрес домашнего сервера.
Если не хочется "светить" пароль в конфиге, вырезаем из строчки "-p pass", тогда программа при запуске будет запрашивать ввод пароля прокси-сервера с клавиатуры.
8. Подключаемся...
pk@mainframe:~$ ssh home
Enter proxy password:
Proxy basic auth is XXXXXXXXX=
proxy is 192.168.100.100 [ip-адрес прокси]
Connected to 192.168.100.100:8080
Tunneling to 217.114.XXX.XXX:80 (destination)
Connect string sent to Proxy: 'CONNECT 217.114.XXX.XXX:80 HTTP/1.0
Proxy-authorization: Basic XXXXXXXXX=
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32)
Proxy-Connection: Keep-Alive
'
DEBUG: recv: 'HTTP/1.0 200 Connection established
'DEBUG: recv: '
'Starting tunnel
pk@home's password:
[9]. Хосты home и proxy прописал в /etc/hosts
192.168.100.100 proxy
217.114.XXX.XXX home
Замечания и предложения принимаются. )))