Как я могу установить прокси для Subversion с туннелем SSH?


24

Я хочу проверить / обновить код через прокси, так как мое локальное соединение медленное. Я установил туннель ssh: ssh -D 8090 user@ssh.proxy.net для пересылки всех пакетов на мой локальный хост: 8090.

Как я могу настроить Subversion, чтобы использовать это?

ssh  svn  proxy 

+1, хороший вопрос. Мне интересно посмотреть, есть ли способ сделать это тоже. У меня очень медленный Wi-Fi, и я часто просматриваю прокси-сервер SOCKS, настроенный таким же образом, было бы удобно, чтобы Subversion (или другие) использовали то же самое.
Тим Пост

А прокси делает твой вай фай быстрее?
InnaM

Ответы:


21

Вы используете SSH для настройки локального сервера SOCKS, который туннелирует к вашему SSH-серверу. Вы упоминаете, что ваша причина в том, что «локальное соединение медленное», но я не вижу, как туннелирование к SSH-серверу сделает это быстрее.

В любом случае, ваша проблема в том, что Subversion может подключаться через HTTP-прокси или SSH-туннель, но не имеет понятия о SOCKS. Так что вам нужно SOCKSify Subversion, захватив все его TCP соединения и перенаправив их на прокси SOCKS.

Вместо того чтобы перефразировать тех, кто делал это раньше, я укажу вам их подробные объяснения:

Или в двух словах, в основном вырезанные из страницы Оливера:

Debian содержит два соксификатора, которые также доступны в sourceforge. Последний обновленный - это ProxyChains, и его довольно просто настроить. Большинство socksifiers работают аналогичным образом, поэтому эти инструкции должны быть разумным общим случаем. Для настройки ProxyChains вам просто нужно отредактировать $ (HOME) /. Proxychains / proxychains.conf, чтобы иметь только следующие строки:

DynamicChain
tcp_read_time_out 15000
tcp_connect_time_out 10000
[ProxyList]
socks5 127.0.0.1 8090
# NB: for some reason 'localhost' doesn't work in the above line

Все, что вам нужно сделать, это «обернуть» svn в ProxyChains.

proxychains svn commit

В приведенном выше примере приложение svn не было мудрым, так как его TCP-соединения с сервером Subversion были перенаправлены через ваш SOCKS-прокси ».


Большое спасибо, это работает для меня. Если вы работаете в OS X и нуждаетесь в переадресации DNS, используйте эту ветвь прокси-цепочки. github.com/haad/proxychains и убедитесь, что строка «proxy_dns» находится в конфигурации после первой строки.
Gourneau

2

Публикуя здесь, я нашел менее хитрый способ сделать это. Вы можете использовать Polipo для использования туннеля SSH SOCKS через HTTP-прокси, добавив в его конфигурацию следующие строки:

socksParentProxy = "localhost:8090"
socksProxyType = socks5

polipoпо умолчанию слушайте порт 8123. А затем в $HOME/.subversion/serversсоздании группы для подрывных хостов вы хотите проверить с, например , если ваш хост подрывного хранилища (s) назван proj1.svn.domain.tld, proj2.svn.domain.tldи т.д., а затем добавить следующее [groups]раздел:

[groups]
domain = *.svn.domain.tld

И, наконец, укажите конфигурацию прокси для группы узлов, которую вы только что добавили, добавив блок для группы:

[domain]
http-proxy-host=localhost
http-proxy-port=8123

После этого вы сможете нормально работать с репозиторием, как вы привыкли работать без SSH-туннеля.

НТН


Для чего нужен "localhost: 8090"?
Deqing

@Deqing - это SOCKS-прокси, который используется Polipo в качестве апстрима.
Ашиш ШУКЛА

1

Я не знаю о туннелировании с ssh -Dиспользованием чего-то вроде

ssh -L8090:svn.server.com:22 user@other.server.com

Затем вы можете сделать туннелирование, добавив новый протокол в Subversion с конкретным портом, на котором включен туннель. Итак, в ~ / .subversion / config добавьте строку вроде

pssh = ssh -p8090

в [tunnels]разделе, а затем вместо svn + ssh: //user@original.com используйте svn + pssh: // user @ localhost

Если у вас есть рабочая рабочая копия, вы можете использовать

svn switch --relocate svn+ssh://user@original.com svn+pssh://user@localhost

чтобы изменить адрес, с которым связана рабочая копия, не нужно делать новую проверку.


Я не могу поймать. Предположим: я изначально оформляю заказ с помощью: svn co svn: //code.somewhere.com/prj prj И что мне теперь делать? По сути, я не могу понять, что вы подразумеваете под: «вместо svn + ssh: //user@ssh.proxy.net». Спасибо

Если у вас есть рабочая копия svn co svn+ssh://code.somewhere.com/prj prj, то prj/при запуске и запуске svn switch --relocate svn+ssh://code.somewhere.com svn+pssh://localhost/svn co svn+pssh://localhost/prj prj
обновится

Может быть, мы где-то неправильно поняли. На самом деле я хочу проверить код на сервере A через сервер B (ssh -D 8090 user @ B) на моей локальной машине, это возможно? svn co svn + pssh: // localhost / prj prj, кажется, просто проверяет код на сервере B, если я вас не получаю.

Я обновился, чтобы решить эту проблему с помощью туннеля ssh, который я знаю. Если я правильно понимаю, с помощью «ssh -L8090: serverA.com: 22 user@serverB.com», а затем «svn co svn + pssh: // user @ localhost / prj prj» проверим код с сервера A на вашем машина, через сервер B.
Blahdiblah

Ах! Я думаю, что вижу, где может быть путаница. Настройка туннеля запускает оболочку на прокси-сервере, но это не то место, где выполняются команды svn. Это должно произойти в отдельной оболочке на вашем компьютере. Флаг -f для ssh может разрешить использование той же оболочки.
Blahdiblah

1

Посмотрите на файлы конфигурации по умолчанию в ~ / .subversion / Есть много полезных примеров, закомментированных. Прокси будут настроены в ~ / .subversion / servers


1

Есть случаи, когда на ПК с Windows требуется подключить svn + ssh к репозиторию SVN через прокси-сервер socks . Эта проблема может быть решена с помощью Putty, который обеспечивает функциональность SSH и может работать с различными типами прокси. Предлагаемое решение не требует локальной переадресации портов.

  1. Запустите putty и создайте сеанс (например, socks_proxy)
  2. Настройте ТОЛЬКО прокси для сеанса (Соединение-> Прокси), где требуется указать имя хоста и порт прокси . Putty работает с выбором различных типов прокси, включая SOCKS4 и SOCKS5. При желании вы можете указать имя пользователя и пароль для доступа к прокси.
  3. Сохранить сессию. Пожалуйста, помните, что у сеанса не будет настроенного имени хоста для соединения.
  4. Откройте файл конфигурации SVN Application Data \ Subversion \ config и найдите раздел [туннели]
  5. Поместите дополнительное описание протокола SVN ниже заголовка раздела: ssh = PATH_TO_PLINK / PLINK.EXE -load socks_proxy . На самом деле имя протокола - ваш выбор, поэтому вы можете выбрать любое имя, если ssh уже используется (например, используйте pssh = вместо ssh = ).
  6. Настройте ключ для доступа SSH к целевому серверу, где SSH будет использоваться для запуска svnserve . Рекомендуется использовать Pageant для поддержки ключей.
  7. Используйте SVN для доступа SVN + SSH. Имя пользователя должно быть передано в URL - svn ls svn + protocol_name : // username @ server / repository, где имя протокола должно быть заменено реальным именем, используемым в разделе [tunnels] конфигурации SVN.

Что это - SVN будет использовать имя протокола, чтобы определить, что plink.exe должен использоваться для соединения, а plink будет использовать имя сеанса socks_proxy, чтобы определить, что прокси присутствует. Помните, что PATH_TO_PLINK следует вводить с косой чертой, а не с обратной косой чертой. Пример для случая, когда plink.exe находится в папке C: \ Program Files \ Putty: ssh = C: / Program Files / Putty / PLINK.EXE -load socks_proxy .


1

Вы могли бы попробовать tsocks . С помощью tsocks вы настраиваете его для использования SSH-прокси SOCKS, а затем запускаете svn следующим образом:

tsocks svn co {etc...}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.