Как я могу использовать SSH с прокси SOCKS 5?


35

У меня есть прокси SOCKS5, настроенный через PuTTY с портом 7777, настроенным как динамический порт. Я могу использовать firefox / filezilla / etc, настроив их на использование прокси-сервера SOCKS с localhostпортом 7777. Но я не могу понять, как подключиться через ssh (через Cygwin) к удаленному серверу, используя динамический порт. Это возможно?

Я попытался с ProxyCommandпомощью следующего метода.

  1. Создайте ~/.ssh/configсо следующей строкой:

    ProxyCommand /usr/bin/nc -X connect -x 127.0.0.1:7777 %h %p
    
  2. Запустите ssh -p22 user @ remotehost

Я получаю сообщение ssh_exchange_identification: Connection closed by remote host


1
Чтобы программа, не поддерживающая SOCKS, прошла через SOCKS, вы можете использовать так называемый проксифер; см. en.wikipedia.org/wiki/Comparison_of_proxifiers . В частности, я рекомендую мой открытый источник tun2socks proxifer ( code.google.com/p/badvpn/wiki/tun2socks ).
Амброз Бизжак

Спасибо за комментарий Амброз. Мне нужно, чтобы он работал в cygwin, и на странице википедии о проксификаторах я вижу, что все упомянутые в нем либо не реализованы в cygwin, либо неприменимы. Есть ли способ заставить работать проксификатор в cygwin?

вам не нужно специально поддерживать Cygwin. Программы Cygwin, в конце концов, являются просто программами Windows, но с интерфейсом POSIX, реализованным в виде библиотеки. Если в Windows работает проксификатор, он должен нормально проксировать программы Cygwin.
Амброз Бизжак

Ответы:


31

Вы используете «connect» для HTTPS в качестве прокси-версии, это от man nc:

-X proxy_version Запрашивает, чтобы nc использовал указанный протокол при обращении к прокси-серверу. Поддерживаются следующие протоколы: «4» (SOCKS v.4), «5» (SOCKS v.5) и «connect» (HTTPS-прокси). Если протокол не указан, используется SOCKS версии 5.

Таким образом, вы должны использовать следующее, чтобы использовать SOCKS 5:

ProxyCommand /usr/bin/nc -X 5 -x 127.0.0.1:7777 %h %p

Или просто:

ProxyCommand /usr/bin/nc -x 127.0.0.1:7777 %h %p

Я надеюсь, что это помогает.


Спасибо Саман, что сработало! Также, спасибо за объяснение, это помогает.

ProxyCommandДолжна быть первой строке вашего ~/.ssh/config', or else nested inside a specify раздела Host`. Не совсем уверен, почему. Это не работает, если это последняя строка в~/.ssh/config
Аарон МакДейд

@AaronMcDaid: From man ssh_config: «Для каждого параметра будет использоваться первое полученное значение.» Поэтому ... глобальные настройки должны быть перед любыми Hostразделами. Последняя строка ~/.ssh/configявляется частью последнего Hostраздела.
mpb

Стоит отметить, что netcat работает /bin/ncна Debian и Ubuntu.
За Лундберг

11
ssh -o ProxyCommand='nc --proxy-type socks4 --proxy 127.0.0.1:9050 %h %p' user@host

fc19 x86_64, Ncat: версия 6.25


просто любопытно - почему proxy-type socks4?
Подозреваемый

2
Можете ли вы добавить немного больше объяснений, чтобы сказать, почему это решение.
ChrisF

1
@ChrisF - это то же самое, что и принятое решение, но оно однострочное! Нет необходимости изменять любой файл конфигурации.
j123b567

1
Это программа nmap ncat (используется apt install nmapв системах APT, таких как Ubuntu и Debian), которая отличается от netcat (будь то netcat-openbsd или netcat-традиционный Hobbit).
Адам Кац

1
@suspectus связанное с @Adam Katz комментария, то proxy-typeэто socks4потому , что птар ncatпрограмма не поддерживала sock5 до совсем недавно. Действительно, это проблема даже сейчас (ноябрь 2017 г.), поскольку RHEL 7 / Centos 7 переключились на пакет nmap, но использовали более старую сборку, которая не поддерживает socks5
Randall

3

tsocks ( http://tsocks.sourceforge.net/ ) - это хорошая оболочка, которая использует LD_PRELOAD, чтобы любая программа прозрачно использовала прокси SOCKS:

tsocks ssh example.com

Просто работает, не забудьте настроить IP прокси SOCKS в /etc/tsocks.conf


слишком сложно иметь файл конфигурации
Цзян

1

Следующая команда сделает просто использовать nc:

ssh examplehost.com -o "ProxyCommand=nc --proxy localhost:7000 %h %p"

По умолчанию используется HTTP-прокси, HTTP-прокси работает на порту 7000.

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