Ändern Sie den SSH-Jump-Host basierend auf dem Hostnamenpräfix/-suffix

Ändern Sie den SSH-Jump-Host basierend auf dem Hostnamenpräfix/-suffix

Ich möchte auf einige sehr ähnliche Maschinen zugreifen, die sich in einem privaten Netzwerk befinden: A, B, C. Ich habe einen JumpHost konfiguriert J1und die Konfiguration für die folgenden Maschinen so eingerichtet, dass sie ihn verwenden:

Host J1
    HostName 123.123.123.123
    User ciprian

Host A B C
    HostName %h
    User ciprian
    ProxyJump J1
    LocalForward 8501 localhost:8501

Jetzt richte ich einen zweiten JumpHost ein, J2und möchte über J1oder eine Verbindung zu denselben Maschinen herstellen J2. Gibt es eine Möglichkeit, die Konfigurationsdatei so zu schreiben, dass die Maschine, wenn sie J1im Namen hat, durch springt J1, oder wenn sie hat J2, durch springt J2? Natürlich ohne manuelle Angabe exakter Übereinstimmungen :)

Ich kann die Konfiguration wie folgt schreiben:

# ...
Host *-J1
    ProxyJump J1

Host *-J2
    ProxyJump J2

Host A* B* C*
    # --- Which Host name? ---
    User ciprian
    # ...

Wenn ich also eingebe ssh A-J1, werden die Einstellungen zum Springen über J1 übernommen. Beim Parsen der Definition in Bezug auf A*kann ich jedoch nicht mehr angeben HostName, da sich dies %hauf auflösen würde A-J1und ich möchte, dass es sich einfach auflöst A.

CanonicalizeHostNameIch bin davon überzeugt, dass man mit und zaubern kann CanonicalizePermittedCNAMEs, bin mir aber nicht sicher wie.

Antwort1

Sie können ProxyCommand und einige kleinere Shell-Skripte verwenden:

Host *-prefix1
   ProxyCommand ssh -q jump1 'H="%h"; nc ${H%%-prefix1} %p || echo "ProxyCommand failed! >&2"'

Host *-prefix2
   ProxyCommand ssh -q jump2 'H="%h"; nc ${H%%-prefix2} %p || echo "ProxyCommand failed! >&2"'

verwandte Informationen