ssh - Nachschlagen von IP über API bei Bedarf

380
Wolph

Gibt es eine Möglichkeit, ssh die IP-Adresse für einen bestimmten Hostnamen über eine externe API dynamisch nachschlagen zu lassen?

Das Szenario ist, dass ich einige Kunden mit Tausenden von unterschiedlichen Cloud-Servern auf Abruf habe (neue werden jede Stunde hinzugefügt, alte werden jede Stunde getötet).

Da es so viele Namen gibt und sie sich schnell ändern, ist die Verwendung des Cloud-Dienstes DNS-API nicht wirklich eine Option (ich habe es schon vorher versucht, ihre Admin-Panels und API-Server zu beenden).

Also ... ich suche nach einer Konfigurationsoption in ssh, um ein Skript zum Nachschlagen der IP-Adresse zu verwenden, wenn ich "ssh some-name" benutze. Ich weiß, ich kann das SSH-Skript aliasieren und es einpacken, aber ich frage mich, ob es eine interne Option gibt.

1
… Betreiben sie die DNS-API auf einer Kartoffel? grawity vor 7 Jahren 0
Sehr wahrscheinlich, aber das kann ich leider nicht kontrollieren, deshalb versuche ich, es so bequem wie möglich zu machen Wolph vor 7 Jahren 0

1 Antwort auf die Frage

2
grawity

Es gibt mehrere Möglichkeiten. In erster Linie gibt es ProxyCommandein Programm, das anstelle der TCP-Verbindung ein beliebiges Programm verwenden kann - solange es SSH in stdin / stdout spricht. (Natürlich funktioniert das nur mit SSH.)

So können Sie beispielsweise über einen anderen SSH-Server tunneln:

ssh -o ProxyCommand="ssh bastion.tld -W %h:%p" server123.tld 

Sie können also ein Tool / Skript in Ihrer bevorzugten Sprache schreiben, das den Hostnamen in der Befehlszeile akzeptiert, den Server nachschlägt, eine TCP-Verbindung herstellt und Daten zwischen stdin / out kopiert. (Es könnte ein Shellscript sein, das läuft nc.)

Dann benutze es so:

# ~/.ssh/config – see `man ssh_config`  Host *.example.com ProxyCommand ~/bin/ssh-cloud-lookup %h %p 

Die zweite Möglichkeit besteht darin, einen benutzerdefinierten DNS-Server zu schreiben, der Ihre Container-API zum Nachschlagen von Adressen und zum Bereitstellen von Antworten verwendet. Ich glaube, ich habe einige Tools wie Chubby gesehen, die genau das tun.


Die dritte Option (spezifisch für Linux) besteht darin, ein "nsswitch" -Plugin zu schreiben, das die Suche nach Hostnamen implementiert, ähnlich den vorhandenen "dns" -, "mdns" -, "files" -Plugins. Zum Beispiel liefert systemd ein Plugin nss_mymachines, das den Namen von nspawn-Containern auflösen soll.

Perfekt, die ProxyCommand-Option sollte für meinen Fall gut funktionieren. Die API ist für die anderen Lösungen viel zu langsam Wolph vor 7 Jahren 0