3
votes

Étant donné le nom d'hôte, récupérez l'hôte à partir de ~ / .ssh / config

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 ?


4 commentaires

Pourquoi ne pas utiliser nslookup ici? Utilisez quelque chose comme ssh -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 comme nslookup 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 de ssh foo , elle n'a pas besoin de correspondre au nom DNS.


3 Réponses :


1
votes

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


0 commentaires

3
votes

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


0 commentaires

1
votes
$ awk -v ip='111.11.111.111' '{f[$1]=$2} $1=="Hostname" && $2==ip{print f["Host"]}' file
foo

0 commentaires