Wie bekomme ich einen SSH-Socken-Proxy auf Anfrage?

846
Matei David

Ich weiß, sshbietet einen SOCKS-Proxy mit -D. Ich frage mich, ob es möglich ist, einen solchen Proxy auf Anforderung zu starten, sobald eine Verbindung zu einem angegebenen Port hergestellt wird (z. B. unter socatund ncunter der Haube). Dies ist ein Einzelbenutzer-Computer, daher ist keine Authentifizierung lokaler Verbindungen erforderlich.

Folgendes habe ich ausprobiert:

  • Weisen Sie den Webbrowser an, einen SOCKS-Proxy unter zu verwenden localhost:portA.

  • Für jede Verbindung mit dem „Trigger“ Port portA, socatruft das nc-ssh-socksSkript, das schließlich-s exec in nc localhost portB:

    socat TCP-LISTEN:portA,fork EXEC:"nc-ssh-socks server portB" 
  • Das Skript stellt außerdem sicher, dass ein sshProzess vorhanden ist, der den SOCKS-Proxy bereitstellt localhost:portB:

    cmd="ssh -fND $2 $1" pgrep -u $USER -fx "$cmd" || $cmd exec nc localhost $2 

Das Schema funktioniert jedoch nicht, ich bekomme immer Fehler aus socat -ddddddem Formular:

W read(6, 0x1bf5360, 8192): Connection reset by peer W waitpid(): child 25032 exited with status 1 E write(6, 0x1bf5360, 2): Broken pipe 

Seltsamerweise sehe ich gelegentlich Teile einer Seite im Browser, aber ich weiß nicht, ob dies auf Zwischenspeicherung zurückzuführen ist oder weil einige Verbindungen funktionieren, die meisten jedoch nicht.

Kennt jemand genug über socat, ncund sshzu verstehen, warum dies nicht funktioniert?

4

1 Antwort auf die Frage

0
CoreyJJohnson

Erhöhen Sie Ihre Sichtbarkeit beim Debuggen, indem Sie -fN aus Ihrem ssh-Befehl entfernen und -vvv für debug info hinzufügen. Dadurch erhalten Sie nur Informationen auf der Clientseite. Möglicherweise erfahren Sie jedoch mehr.