Как может быть, что ssh somename работает, а nslookup somename — нет?

Имеет смысл использовать скрипт awkдля создания функции awk...

$ awk -f script.awk file
function check() {
        if (marks < 80) return "green"
        if (marks > 80) return "yellow"
}

Где script.awkэто

BEGIN {
    FS = ","
    printf("function check() {\n")
}

{
    printf("\tif (%s %s %s) return \"%s\"\n", $1, $2, $3, $4)
}

END {
    printf("}\n")
}

Это просто перебирает строки в файле, разделенном запятыми -, и использует поля для вывода операторов ifи return. Их будет столько, сколько строк во входном файле.

Я позволяю блокам BEGINи ENDвыполнять функции верхнего и нижнего колонтитула, а блок BEGINдополнительно устанавливает разделитель полей ввода в виде запятой.

Проверка правильности ввода не выполняется. Это, вероятно, вошло бы в основной блок в теле скрипта.

Перенаправить вывод скрипта в файл, например. color.awk.

Добавление дополнительной строки во входной файл,

marks,==,80,red

приведет к

function check() {
        if (marks < 80) return "green"
        if (marks > 80) return "yellow"
        if (marks == 80) return "red"
}

Связанные:

16
08.05.2019, 17:00
2 ответа

Nslookup — это программа для запроса серверов имен доменов в Интернете . Nslookup очень хорош для запросов DNS-серверов, но он не дает полной картины, когда дело доходит до разрешения имен.

В Linux разрешение имен чаще всего контролируется NSS , который настраивается с помощью /etc/nsswitch.conf. В частности, эта конфигурация содержит запись hosts. Например:

hosts:          files dns

В приведенной выше записи вы можете видеть, что первое, что нужно запросить, это files, за которым следует dns, что означает, что /etc/hostsбудет запрошено перед DNS. Существуют и другие варианты, включая LDAP , Multicast DNS и WINS .

Отвечая на ваш вопрос напрямую, SSH преобразует имя хоста в IP-адрес, используя NSS (, извлекая результаты из нескольких источников ), где nslookup запрашивает только DNS.

Вы можете проверить, какой IP NSS разрешает имя хоста в с помощью getent. Например, чтобы разрешитьsomename:

getent hosts somename

Также В случае SSH вы можете настроить информацию о хосте в /etc/ssh/ssh_configи ~/.ssh/config. Это даже позволит вам указать IP-адрес для имени хоста, полностью пропуская разрешение имени.:

Следующее указывает SSH использовать 192.168.1.25как для dev, так и для dev.example.com.SSH будет использовать этот адрес вне зависимости от того, эти имена существуют как DNS-имена для другого IP-адреса:

# contents of $HOME/.ssh/config
Host dev dev.example.com
    HostName 192.168.1.25
32
27.01.2020, 19:48

Филип уже почти у цели, но направляется в .ssh/configкрысиную нору, которую вряд ли ты устроил.

Команды...

getent hosts somename

...запрашивает NSS, используя строку поиска hosts:в /etc/nsswitch.conf, а не просто DNS, как это делает nslookup. Скорее всего, ваша среда Unix использует более одной службы имен; возможно, какой-то тип интеграции с AD.

4
27.01.2020, 19:48

Теги

Похожие вопросы