Existe-t-il un moyen d'obtenir le Host
à partir du .ssh / config
avec un Hostname
?. Par exemple
~|> ssh -G foo | grep -E '\bhostname ' | cut -d " " -f 2 111.11.111.111
Si je connais l'hôte, je peux obtenir le nom d'hôte, comme ceci:
Host foo Hostname 111.11.111.111 User root Port 22
Y a-t-il un moyen de le faire vice versa? Je connais l'ip (111.11.111.111) mais je veux obtenir foo
?
3 Réponses :
ssh -G
semble s'attendre à un seul hôte, mais vous pouvez essayer d'analyser vous-même le fichier de configuration. Quelque chose comme ça semble fonctionner sur mon système:
awk -v h="111.11.111.111" \ '$1 == "Host" {r = $2} \ $1 == "Hostname" && $2 == h {print r; exit}' \ ~/.ssh/config
Bien sûr, c'est assez fragile, par exemple dans le cas où une entrée manque le champ Hostname
Pourriez-vous s'il vous plaît essayer ci-dessous, en ajoutant un autre pour obtenir le nom d'hôte du fichier ~ / .ssh / config.
1ère solution: Préparé et testé sous GNU awk .
tac ~/.ssh/config | awk -v ip="111.11.111.111" '$1=="Hostname" && $NF==ip{getline;if($1=="Host"){print $2;exit}}'
OU
awk -v ip="111.11.111.111" -v RS="" ' $3=="Hostname" && \ $4==ip && \ $1=="Host"{ print $2 }' ~/.ssh/config
2e solution: Utiliser tac
avec awk
ici.
awk -v ip="111.11.111.111" -v RS="" '$3=="Hostname" && $4==ip && $1=="Host"{print $2}' ~/.ssh/config
$ awk -v ip='111.11.111.111' '{f[$1]=$2} $1=="Hostname" && $2==ip{print f["Host"]}' file foo
Pourquoi ne pas utiliser
nslookup
ici? Utilisez quelque chose commessh -G your_ip | grep ....
ne l'a pas testé mais essayez-le une fois et faites-le moi savoir.@ RavinderSingh13 ne fonctionne pas avec ip
-G Fait en sorte que ssh imprime sa configuration après avoir évalué les blocs Host et Match et se ferme.
pour autant que je vois ...En fait, pourquoi nous faisons
ssh
ici, vous pouvez faire commenslookup ip_address
et me le faire savoir alors?@ RavinderSingh13: Ce n'est pas forcément équivalent, l'entrée
Host
est juste un identifiant pour l'enregistrement lors de l'exécution dessh foo
, elle n'a pas besoin de correspondre au nom DNS.