Форум русскоязычного сообщества Ubuntu


Автор Тема: Howto: SSH через HTTP(S)  (Прочитано 19079 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн paramobile

  • Автор темы
  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Howto: SSH через HTTP(S)
« : 26 Февраля 2007, 14:02:45 »
Добрый день.

Столкнулся на рабочем месте с необходимостью подключения к своей домашней тачке по 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


Замечания и предложения принимаются. )))
« Последнее редактирование: 21 Марта 2007, 19:49:40 от doctor »

Оффлайн paramobile

  • Автор темы
  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Re: Howto: SSH через HTTP(S)
« Ответ #1 : 26 Февраля 2007, 22:37:23 »
Первое, что пришло в голову - решить проблему с несоответствием портов в лоб, т.е. перевести SSHD на 80-й порт и оставить его так. Веб-сервера у меня нет и не планируется, но если будет желание, то можно будет SSHD перевесить обратно на 22-й и настроить проброску порта через iptables.

Проброска порта делается так.
IPTABLES -t nat -A PREROUTING -p tcp -d $IP_PPP0 --dport $pSSH_ex -j DNAT --to-destination $IP_LAN0:$pSSH_lc
, где
$IP_PPP0 - честный внешний ip-адрес домашней машины.
$pSSH_ex - порт, к которому подключаемся снаружи (в нашем случае - 80).
$IP_LAN0 - можно оставить тот же внешний честный ip, но с указал локальный, мне так удобнее.
$pSSH_lc - порт, на котором висит SSHD (пишем родной порт - 22).


Оффлайн MechanicalBear

  • Любитель
  • *
  • Сообщений: 59
  • Мишка Механический
    • Просмотр профиля
    • mechanicalbear.ru
Re: Howto: SSH через HTTP(S)
« Ответ #2 : 12 Мая 2008, 07:42:20 »
Решение данной проблемы можно найти [удалено]

--Сперанский

« Последнее редактирование: 16 Июля 2012, 19:29:52 от Сперанский »

 

Страница сгенерирована за 0.029 секунд. Запросов: 23.