jak znaleźć ip ssh HostName

10

Czy istnieje prosty sposób na uzyskanie adresu IP HostNamez konfiguracji ssh w wierszu poleceń? Wiele razy muszę korzystać scpi chciałbym połączyć się z maszyną, ale pamiętam tylko nazwę hosta.

m33lky
źródło
1
scp przeczyta twoje .ssh/configi /etc/ssh/ssh_config. czy istnieje powód, dla którego nie możesz scpować przez aliasy zdefiniowane w konfiguracji?
Tim Kennedy
Powinieneś dodać to jako odpowiedź. Myślę, że kiedy wypróbowałem to po raz pierwszy, nie podałem klucza ani czegoś takiego, więc nie rozpoznałem hosta.
m33lky,
Wydawało się, że jest trochę światła na odpowiedź, ale dodałem ją. wraz z czymś, co uważam za interesujące czytanie związane z konfiguracją ssh.
Tim Kennedy

Odpowiedzi:

2

scp przeczyta twoje ~/.ssh/configi /etc/ssh/ssh_config. tak długo, jak scp do / z nazwy jednego z aliasów hosta w konfiguracji ssh, powinno działać.

ponieważ wydaje się to być krótka odpowiedź, oto kilka informacji o rzeczach, które możesz zrobić z konfiguracją ssh ...

Oto post, który opisuje niektóre zaawansowane funkcje pliku konfiguracyjnego ssh: http://magazine.redhat.com/2007/11/27/advanced-ssh-configuration-and-tunneling-we-dont-need-no- śmierdzące-oprogramowanie VPN /

Potrzebujesz tunelować ssh / scp przez proxy HTTP? nie ma problemu, po prostu wykonaj kroki opisane tutaj: http://www.mtu.net/~engstrom/ssh-proxy.php

Kolejne użycie opcji ProxyCommand: http://jasonmc.wordpress.com/2008/04/16/ssh-magic/

Tim Kennedy
źródło
1
Odpowiedzi na krótkie pytania są świetne. W przeciwnym razie łatwo przejść do tematu. Każdy, kto robi tunelowanie, powinien spojrzeć na sshuttle .
m33lky,
9

Odwzorowanie z hostargumentu podanego w wierszu poleceń na hostnamewpis ssh_config jest łatwe przy użyciu sshsamego siebie.

Możesz poprosić go o ocenę i wydrukowanie, czego użyłby do konfiguracji linii poleceń, bez faktycznego łączenia. Następnie wystarczy wyciągnąć to, co zawiera hostname(zauważ, że kanonizuje nazwy kluczy konfiguracyjnych, konwertując je na małe litery). Prostym przykładem jest:

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

Jeśli .ssh / config zawiera:

Host database
Hostname database.example.com

To zostanie wydrukowane database.example.com.

Aby pingować, możesz oczywiście ocenić wynik i użyć go jako argumentu:

ping $(ssh -G database | awk '/^hostname / { print $2 }')
Lloyd Pique
źródło
2
to jest to. świetna odpowiedź!
heisian
3

Nie trzeba tego robićscp , ale można użyć sshśladów debugowania.

ssh -v HostName ' ' 2>&1 | grep '^debug1: Connecting to'
Gilles „SO- przestań być zły”
źródło
1

Zwykle możesz to zrobić, host HostNamea otrzymasz adres IP.

Jeśli hostnie jest zainstalowany (powinien być), możesz użyć, nslookup HostName 8.8.8.8który użyje serwerów Google DNS do wyszukiwania.

Aby to zrobić, albo program rozpoznawania nazw komputera musi mieć poprawną konfigurację (w pliku /etc/resolv.conf i być może /etc/nsswitch.conf), albo musisz użyć „w pełni kwalifikowanej nazwy domeny” wraz z hostem, domaiin i „TLD” (.org, .com, .net tego rodzaju sufiks).

Bruce Ediger
źródło
3
To nie wyszukuje aliasów hosta ~/.ssh/config, co rozumiem jako sedno tego pytania.
Gilles 'SO - przestań być zły'
Haha, też to zauważyłem. ssh's HostNameto dowolny alias, a nie nazwa domeny.
m33lky 30.11.11
Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
terdon
0

użyj fałszywego ProxyCommand ...

$ ssh -o 'ProxyCommand echo %h>&2' mYaLiAs 2>&1 | fgrep -v ssh_exchange_id |  read actual
$ echo $actual
192.168.1.234
użytkownik102331
źródło