Git через ssh на нестандартном порту (Windows/putty: unknown option -p)

При использовании git через ssh, который работает на нестандартном порту, команда типа

git clone ssh:user@host:port/path

вызывает ssh с параметром -p port. Но под Windows при использовании putty (точнее, plink) в качестве ssh возникает ошибка

plink: unknown option "-p"

потому что putty пошел своим путём и опция у него -P.

Самый простой способ решения: найти в файле plink.exe любым hex-редактором (я по старой памяти использовал hiew, достаточно демо-версии) эту опцию и исправить её: -P --p (0x50 -0x70) в двух местах (одно — разбор командной строки, второе — вывод подсказки).

patch putty -p option»

18.07.2013  Метки: , ,   Рубрики: Инструменты, Разработка  Комментариев нет

Прозрачный ssh туннель

Внешней доступ к внутренним ресурсам сети у нас на работе возможен только через ssh. В принципе, этого достаточно для проверки почты (POP3/SMTP), пользования веб-интерфейсами (HTTP), удаленного управления компьютером (VNC или Remote Desktop), даже для доступа к репозиторию исходных текстов (CVS). Но неудобно. Поясню в двух словах, как получить доступ через ssh, в чем неудобство подхода и как я его преодолел.

ssh позволяет организовать туннели (ssh tunnel). Туннель связывает локальный порт с портом на компьютере, доступном с ssh сервера. Например, удаленный доступ к http-серверу work.yourdomain.com (порт 80) можно получить следующим образом:

ssh -f -N \
-L 10080:work.yourdomain.com:80 \
sshserver.yourdomain.com

Теперь в браузере http://localhost:10080 приведет на http://work.yourdomain.com.

Туннелей можно определить несколько. В приведенной команде добавятся аналогичные строки с ключом -L.

Теперь о проблемах.

  • Абсолютные ссылки на work.yourdomain.com или другой внутренний адрес работать, очевидно, не будут.
  • Если клиентская программа не позволяет изменить порт, придется занимать локальный порт с тем же номером. Не помню точно, где я этим столкнулся, то ли CVS, то ли RDP. Следовательно, на два разных сервера этим клиентом уже не зайдешь.

Проблема преодолевается с помощью port forwarding: надо задать правило, согласно которому запросы на work.yourdomain.com:80 перенаправляются на localhost:10080. Теперь в браузере можно будет использовать честный адрес — запросы на него перенаправятся на localhost, пройдут через ssh туннель и достигнут цели. При определении правил можно использовать только ip-адреса, поэтому проблему разрешения доменных имен надо решать отдельно, но это совсем просто.

Port forwarding в KUbuntu удобно настраивать через Guidedog (требуется установить одноименный пакет):

Guidedog

Но можно и вручную примерно такой командой (я не проверял):

iptables -t nat -A gforward -p tcp --dport 80 -d 1.2.3.4 -j REDIRECT --to-ports 10080
»

09.03.2008  Метки: , ,   Рубрики: Интернет  2 комментария