Ich habe eine EC2-Instanz mit einer dynamischen IP und möchte eine direkte Verbindung damit herstellen, ohne .ssh/config
sie bei jeder Änderung anpassen zu müssen.
Ich kann die IP abfragen mit
aws ec2 describe-instances --filters 'Name=tag:Name,Values=MYTAG' --query 'Reservations[0].Instances[0].NetworkInterfaces[0].Association.PublicIp' --output text
ProxyCommand
Jetzt möchte ich diesen Befehl zum Abschnitt in meiner Datei hinzufügen, .ssh/config
erhalte jedoch einige Fehlermeldungen.
Dies ist der Abschnitt für diesen Host
Host ec2-instance
User ubuntu
IdentityFile my/pem/file.pem
ProxyCommand bash -c "host=$(aws ec2 describe-instances --filters 'Name=tag:Name,Values=MYTAG' --query 'Reservations[0].Instances[0].NetworkInterfaces[0].Association.PublicIp' --output text); ssh ${host}"
Ich weiß ehrlich gesagt nicht, wie diese ProxyCommand
Option funktioniert, und keiner man ssh
von uns man ssh_config
scheint es gut zu erklären.
kann dies erreicht werden?
Antwort1
ProxyCommand fungiert als Alternative für dieRohe TCP-Verbindung.Es ersetzt nicht die gesamte SSH-Verbindung – obwohl es oft zum Aufrufen verwendet wird ssh -W
. Dabei wird jedoch trotzdem nur ein anderes SSH-System verwendet, um einen einfachen TCP-Tunnel bereitzustellen.
In Ihrer Situation sollte der ProxyCommand also eine einfache „TCP-Pipe“-Anwendung wie nc
oder socat
oder ausführen ncat
– alles, was stdin/stdout an eine TCP-Verbindung anfügt, reicht aus:
Host ...
ProxyCommand bash -c "host=...; nc $host %p"
Host ...
ProxyCommand bash -c "host=...; socat STDIO TCP:$host:%p"
Ich würde wirklich empfehlen, alle komplexen Dinge aus Ihrer ~/.ssh/config in ein separates Skript zu verschieben, sodass Ihre Konfiguration einfach so aussehen könnte:
Host ...
ProxyCommand ~/bin/ec2-connect %h %p