Как получить прокси ssh socks по требованию?

733
Matei David

Я знаю, sshпредоставляет SOCKS прокси с -D. Интересно, возможно ли запустить такой прокси по требованию, в тот момент, когда устанавливается соединение с указанным портом (с использованием подобных socatи ncпод капотом). Это однопользовательский компьютер, поэтому аутентификация локальных соединений не требуется.

Вот что я попробовал:

  • Скажите веб-браузеру использовать прокси-сервер SOCKS на localhost:portA.

  • Для каждого подключения к порту «запуска» portA, socatвызывает nc-ssh-socksсценарий, который в конечном счете EXEC-s в 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понять, почему это не работает?

4

1 ответ на вопрос

0
CoreyJJohnson

Во время отладки увеличьте видимость, удалив -fN из команды ssh и добавив -vvv для получения информации об отладке. Это даст вам только информацию о клиенте, но может рассказать вам больше.

Похожие вопросы