Я знаю, что ssh предоставляет SOCKS прокси с -D . Интересно, возможно ли запустить такой прокси-сервер по требованию, в момент, когда установлено соединение с указанным портом (с использованием таких соединений, как socat и nc под капотом). Это однопользовательский компьютер, поэтому аутентификация локальных соединений не требуется.
Вот что я попробовал:
Скажите веб-браузеру использовать прокси-сервер SOCKS на
localhost:portA.Для каждого соединения с "триггерным" портом
portAsocatвызывает скрипт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 чтобы понять, почему это не работает?
