Учитывая имя хоста, получите хост из ~ / .ssh / config - PullRequest
2 голосов
/ 16 марта 2019

Есть ли способ получить Host от .ssh/config с Hostname ?.Например,

Host foo
Hostname 111.11.111.111
User root
Port 22

Если я знаю хост, я могу получить имя хоста, например:

~|> ssh -G foo | grep -E '\bhostname ' | cut -d " " -f 2
111.11.111.111

Есть ли способ сделать это наоборот?Я знаю IP (111.11.111.111), но хочу получить foo?

Ответы [ 3 ]

3 голосов
/ 16 марта 2019

Не могли бы вы попробовать, добавив еще один способ получения имени хоста из файла ~ / .ssh / config.

Первое решение: Подготовлено и протестировано в GNUawk.

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" -v RS="" '
$3=="Hostname" && \
$4==ip && \
$1=="Host"{
  print $2
}'  ~/.ssh/config

2-е решение: Используя tac с awk здесь.

tac ~/.ssh/config | awk -v ip="111.11.111.111" '$1=="Hostname" && $NF==ip{getline;if($1=="Host"){print $2;exit}}'
1 голос
/ 16 марта 2019
$ awk -v ip='111.11.111.111' '{f[$1]=$2} $1=="Hostname" && $2==ip{print f["Host"]}' file
foo
1 голос
/ 16 марта 2019

ssh -G, кажется, ожидает одного хоста, но вы можете попытаться разобрать файл конфигурации самостоятельно. Нечто подобное работает в моей системе:

awk -v h="111.11.111.111" \
      '$1 == "Host" {r = $2} \
       $1 == "Hostname" && $2 == h {print r; exit}' \
     ~/.ssh/config

Конечно, это довольно хрупко, например, если в записи отсутствует поле Hostname

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...