C'è un modo semplice per recuperare l'IP di un HostName
da una configurazione SSH sulla riga di comando? Molte volte devo usare scp
e vorrei connettermi a una macchina, ma ricordo solo il nome host.
C'è un modo semplice per recuperare l'IP di un HostName
da una configurazione SSH sulla riga di comando? Molte volte devo usare scp
e vorrei connettermi a una macchina, ma ricordo solo il nome host.
Risposte:
scp leggerà il tuo ~/.ssh/config
e /etc/ssh/ssh_config
. fintanto che scp a / dal nome di uno degli alias host nella tua configurazione ssh, dovrebbe funzionare.
dato che sembra un po 'breve per essere una risposta, ecco qualche informazione in più sulle cose che puoi fare con la tua configurazione ssh ...
Ecco un post che descrive alcune delle funzionalità avanzate del file di configurazione ssh: http://magazine.redhat.com/2007/11/27/advanced-ssh-configuration-and-tunneling-we-dont-need-no- puzzolente-vpn-software /
Devi eseguire il tunneling di ssh / scp attraverso un proxy http? nessun problema, basta usare i passaggi descritti qui: http://www.mtu.net/~engstrom/ssh-proxy.php
Un altro uso dell'opzione ProxyCommand: http://jasonmc.wordpress.com/2008/04/16/ssh-magic/
Mappare host
dall'argomento fornito dalla riga di comando alla hostname
voce ssh_config è facile usare ssh
se stesso.
Puoi chiedergli di valutare e stampare ciò che userebbe per la configurazione per una riga di comando, senza effettivamente collegarsi. Quindi devi semplicemente estrarre ciò che elenca hostname
(Nota che canonicalizza i nomi delle chiavi di configurazione convertendoli in lettere minuscole). Un semplice esempio è:
ssh -G database | awk '/^hostname / { print $2 }'
Se .ssh / config contiene:
Host database
Hostname database.example.com
Questo verrà stampato database.example.com
.
Per eseguire il ping, è possibile ovviamente valutare l'output e utilizzarlo come argomento:
ping $(ssh -G database | awk '/^hostname / { print $2 }')
Non è necessario farloscp
, ma è possibile utilizzare ssh
le tracce di debug.
ssh -v HostName ' ' 2>&1 | grep '^debug1: Connecting to'
Di solito, puoi farlo host HostName
e otterrai l'indirizzo IP.
Se host
non è installato (dovrebbe essere), è possibile utilizzare nslookup HostName 8.8.8.8
quale utilizzerà i server DNS di Google per effettuare la ricerca.
Per fare queste cose, o il resolver della tua macchina deve avere una configurazione corretta (nel file /etc/resolv.conf e forse /etc/nsswitch.conf) oppure devi usare un "nome di dominio completo", completo di host, domaiin e "TLD" (.org, .com, .net quel tipo di suffisso).
~/.ssh/config
, che capisco essere il punto di questa domanda.
HostName
è un alias arbitrario, non un nome di dominio.
utilizzare un ProxyCommand fasullo ...
$ ssh -o 'ProxyCommand echo %h>&2' mYaLiAs 2>&1 | fgrep -v ssh_exchange_id | read actual
$ echo $actual
192.168.1.234
.ssh/config
e/etc/ssh/ssh_config
. c'è un motivo per cui non puoi scappare dagli alias definiti nella configurazione?