Wie finde ich die IP eines SSH-Hostnamens heraus?

10

Gibt es eine einfache Möglichkeit, die IP von a HostNameaus einer SSH-Konfiguration in der Befehlszeile abzurufen ? scpOft muss ich einen Computer verwenden und möchte eine Verbindung herstellen, aber ich erinnere mich nur an den Hostnamen.

m33lky
quelle
1
scp liest dein .ssh/configund /etc/ssh/ssh_config. Gibt es einen Grund, warum Sie nicht anhand der in der Konfiguration definierten Aliase scp können?
Tim Kennedy
Sie sollten dies als Antwort hinzufügen. Ich denke, als ich es zuerst versuchte, habe ich den Schlüssel oder etwas nicht angegeben, also hat es den Host nicht erkannt.
m33lky
schien ein wenig leicht für eine Antwort, aber ich fügte es hinzu. zusammen mit dem, was ich für eine interessante ssh config bezogene Lektüre halte.
Tim Kennedy

Antworten:

2

scp liest dein ~/.ssh/configund /etc/ssh/ssh_config. Solange Sie zum Namen eines der Host-Aliase in Ihrer SSH-Konfiguration wechseln, sollte dies funktionieren.

Da dies eine kurze Antwort zu sein scheint, finden Sie hier einige weitere Informationen zu Dingen, die Sie mit Ihrer SSH-Konfiguration tun können ...

Hier ist ein Beitrag, der einige der erweiterten Funktionen der ssh-Konfigurationsdatei beschreibt: http://magazine.redhat.com/2007/11/27/advanced-ssh-configuration-and-tunneling-we-dont-need-no- stinkende-vpn-software /

Müssen Sie ssh / scp über einen http-Proxy tunneln? Kein Problem, führen Sie einfach die hier beschriebenen Schritte aus: http://www.mtu.net/~engstrom/ssh-proxy.php

Eine andere Verwendung der ProxyCommand-Option: http://jasonmc.wordpress.com/2008/04/16/ssh-magic/

Tim Kennedy
quelle
1
Kurze Antworten auf den Punkt sind großartig. Ansonsten ist es einfach, vom Thema abzukommen. Wer tunnelt, sollte sich sshuttle ansehen .
m33lky
9

hostDas Zuordnen von dem in der Befehlszeile angegebenen Argument zum hostnameEintrag ssh_config ist einfach ssh.

Sie können ihn bitten, auszuwerten und auszudrucken, was für die Konfiguration einer Befehlszeile verwendet werden soll, ohne tatsächlich eine Verbindung herzustellen. Dann müssen Sie nur noch herausziehen, wofür es aufgelistet ist hostname(Beachten Sie, dass Konfigurationsschlüsselnamen kanonisiert werden, indem sie in Kleinbuchstaben konvertiert werden). Ein einfaches Beispiel ist:

ssh -G database | awk '/^hostname / { print $2 }'

Wenn .ssh / config enthält:

Host database
Hostname database.example.com

Dies wird ausgedruckt database.example.com.

Um es zu pingen, können Sie natürlich die Ausgabe auswerten und als Argument verwenden:

ping $(ssh -G database | awk '/^hostname / { print $2 }')
Lloyd Pique
quelle
2
das ist das Zeug. gute Antwort!
Heisian
3

Sie müssen dies nicht tunscp , aber Sie können die sshDebugging-Traces verwenden.

ssh -v HostName ' ' 2>&1 | grep '^debug1: Connecting to'
Gilles 'SO - hör auf böse zu sein'
quelle
1

Normalerweise können Sie dies tun host HostNameund Sie erhalten die IP-Adresse.

Wenn hostes nicht installiert ist (sollte es sein), können Sie nslookup HostName 8.8.8.8die Google DNS-Server verwenden, um die Suche durchzuführen.

Um dies zu tun, muss entweder der Resolver Ihres Computers eine korrekte Konfiguration haben (in der Datei /etc/resolv.conf und möglicherweise /etc/nsswitch.conf) oder Sie müssen einen "vollständig qualifizierten Domänennamen" mit Host verwenden. domaiin und "TLD" (.org, .com, .net diese Art von Suffix).

Bruce Ediger
quelle
3
Hier werden keine Host-Aliase nachgeschlagen ~/.ssh/config, was meiner Meinung nach der Punkt dieser Frage ist.
Gilles 'SO - hör auf böse zu sein'
Haha, das habe ich auch gerade bemerkt. ssh's HostNameist ein beliebiger Alias, kein Domainname.
m33lky
Kommentare sind nicht für eine ausführliche Diskussion gedacht. Dieses Gespräch wurde in den Chat verschoben .
Terdon
0

Verwenden Sie einen gefälschten ProxyCommand ...

$ ssh -o 'ProxyCommand echo %h>&2' mYaLiAs 2>&1 | fgrep -v ssh_exchange_id |  read actual
$ echo $actual
192.168.1.234
user102331
quelle