Как получить ssh socks прокси по требованию?
Я знаю ssh
предоставляет SOCKS прокси с -D
, Интересно, возможно ли запустить такой прокси по требованию, в момент, когда соединение установлено с указанным портом (используя socat
а также nc
под капотом). Это однопользовательский компьютер, поэтому аутентификация локальных соединений не требуется.
Вот что я попробовал:
Скажите веб-браузеру использовать прокси SOCKS на
localhost:portA
,Для каждого подключения к "триггерному" порту
portA
,socat
вызываетnc-ssh-socks
сценарий, который в конечном итоге exec-ы вnc localhost portB
:socat TCP-LISTEN:portA,fork EXEC:"nc-ssh-socks server portB"
Сценарий также обеспечивает
ssh
Процесс существует, что обеспечивает SOCKS прокси вlocalhost:portB
:cmd="ssh -fND $2 $1" pgrep -u $USER -fx "$cmd" || $cmd exec nc localhost $2
Однако схема не работает, я получаю ошибки от socat -ddddd
формы:
W read(6, 0x1bf5360, 8192): Connection reset by peer
W waitpid(): child 25032 exited with status 1
E write(6, 0x1bf5360, 2): Broken pipe
Странно, но иногда я вижу части страницы, которые отображаются в браузере, но я не знаю, связано ли это с кэшированием или с тем, что некоторые соединения работают, но большинство не работает.
Кто-нибудь знает достаточно о socat
, nc
, а также ssh
чтобы понять, почему это не работает?
1 ответ
Во время отладки увеличьте видимость, удалив -fN из команды ssh и добавив -vvv для получения информации об отладке. Это даст вам информацию только на стороне клиента, но может рассказать вам больше.