4

Я знаю, что 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 чтобы понять, почему это не работает?

1 ответ1

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .