Как получить 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 для получения информации об отладке. Это даст вам информацию только на стороне клиента, но может рассказать вам больше.

Другие вопросы по тегам