GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich die SSH-Weiterleitung mit AllowTcpForwarding auf no setzen?

Solange man socat ausführen kann lokal und unter gateway (oder auch nur bash und cat auf gateway , siehe letztes Beispiel!) und darf nicht Verwenden Sie ein pty, um 8 Bit sauber zu sein. Es ist möglich, einen Tunnel über ssh einzurichten. Hier sind 4 Beispiele, die die vorherigen verbessern:

Einfaches Beispiel, das einmal funktioniert

(Ein Fork würde eine SSH-Verbindung pro Tunnel erfordern, nicht gut). Der : entkommen müssen damit socat den exec-Befehl akzeptiert:

term1:

$ socat tcp-listen:12345,reuseaddr exec:'ssh [email protected] exec socat - tcp\:devbox\:22',nofork

term2:

$ ssh -p 12345 [email protected]

term1:

[email protected]'s password:

term2:

[email protected]'s password: 

Das Umkehren der ersten und zweiten Adresse macht den Socket sofort verfügbar

socat muss verantwortlich bleiben, also kein nofork :

term1:

    $ socat exec:'ssh [email protected] exec socat - tcp\:devbox\:22' tcp-listen:12345,reuseaddr
    [email protected]'s password:

term2:

    $ ssh -p 12345 [email protected]
    [email protected]'s password:

Mit ControlMaster ssh

ermöglicht das Forken, während nur eine einzige ssh-Verbindung zum Gateway verwendet wird, wodurch ein Verhalten ähnlich der üblichen Portweiterleitung erreicht wird:

term1:

    $ ssh -N -o ControlMaster=yes -o ControlPath=~/mysshcontrolsocket [email protected]
    [email protected]'s password:

term2:

    $ socat tcp-listen:12345,reuseaddr,fork exec:'ssh -o ControlPath=~/mysshcontrolsocket [email protected] exec socat - tcp\:devbox\:22'

term3:

    $ ssh -p 12345 [email protected]
    [email protected]'s password:

Mit nur bash und cat erhältlich unter gateway

Durch die Verwendung von bash 's eingebaute TCP-Umleitung und zwei Halbduplex-cat Befehle (für ein Vollduplex-Ergebnis) braucht man nicht einmal einen entfernten socat oder netcat . Der Umgang mit mehreren Schichten verschachtelter und maskierter Anführungszeichen war etwas umständlich und kann vielleicht besser gemacht oder durch die Verwendung eines entfernten bash vereinfacht werden Skript. Es muss darauf geachtet werden, dass der gegabelte cat vorhanden ist nur für die Ausgabe:

term1 (keine Änderung):

$ ssh -N -o ControlMaster=yes -o ControlPath=~/mysshcontrolsocket [email protected]
[email protected]'s password:

term2:

$ socat tcp-listen:12345,reuseaddr,fork 'exec:ssh -T -o ControlPath=~/mysshcontrolsocket [email protected] '\''exec bash -c \'\''"exec 2>/dev/null 8<>/dev/tcp/devbox/22; cat <&8 & cat >&8"\'\'\'

term3:

$ ssh -p 12345 [email protected]
[email protected]'s password:

ProxyJump durch Bash ersetzen

Die Idee oben ist gut! Hier ist meine generische ssh_config-Version bei ProxyJump funktioniert nicht weil AllowTcpForwarding auf no gesetzt und meine Standard-Shell ist BASH:

ProxyCommand=ssh -T [email protected] "exec 3<>/dev/tcp/%h/%p 2<&- ; cat <&3 & cat >&3 ; kill $!"
  • -T Pseudoterminalzuordnung deaktivieren
  • exe Es wird kein neuer Prozess (bash) erstellt
  • 3 ist einfach eine Umleitung zu einem verfügbaren Dateideskriptor
  • /dev/tcp/... fordert bash auf, den entsprechenden TCP-Socket zu öffnen.
  • %h und %p wird von Ihrem OpenSSH-Client als devbox ausgewertet und 22
  • 2<&- schließt STDERR (man könnte es auch nach /dev/null umleiten)
  • Katze <&3 & liest den ausgewählten Dateideskriptor 3 im Hintergrund
  • Katze>&3 wird unseren Dateideskriptor in den Vordergrund schreiben
  • töte $! tötet die "lesende" Katze <&3 Befehl, der im Hintergrund ausgeführt wird, wenn Sie die Verbindung schließen/unterbrechen. Sonst würde es weiterlaufen.

Es könnte ProxyJump für mich in Situationen ersetzen, in denen es auf dem Jump-Server deaktiviert war, aber ich wollte wirklich nicht meinen privaten Schlüssel dorthin weiterleiten oder irgendwelche Passwörter ohne eine zusätzliche Verschlüsselungsebene eingeben. Andere SSH_AUTH_SOCK als Root zu benutzen oder Terminal-Sessions komplett mit Tastenanschlägen aufzuzeichnen sind beides reale Dinge.

Aber stellen Sie bitte immer sicher, dass Sie keine Richtlinien verletzen, die für Sie gelten!


Linux
  1. SSH zu einem anderen Port als 22:So geht's (mit Beispielen)

  2. So richten Sie SSH-Tunneling ein

  3. So richten Sie SSH-Schlüssel ein

  4. Wie stellt man das Datum im Epochenformat ein?

  5. So richten Sie SSH-Schlüssel unter Ubuntu 18.04 ein

So übertragen Sie Dateien mit Rsync über SSH

So richten Sie die dynamische SSH-Portweiterleitung unter Linux ein

So richten Sie die E-Mail-Weiterleitung in cPanel ein

So richten Sie eine Firewall mit GUFW unter Linux ein

So richten Sie SSH unter CentOS und RHEL ein

So sichern Sie SSH mit Fail2Ban