Вопрос или проблема
Почему я получаю это, когда выполняю pbrun
.
$ pbrun ls
Вам НЕ разрешено использовать pbrun -h <remotehost> ls.
Пожалуйста, попробуйте снова без опции -h.
Хост: xxxx
Submithost: xxxx.abcd.xyz.com
pbrun7.5.0-12[404]: Запрос отклонен pbmasterd на сервере server1234.abcd.yyyy.com.
На самом деле я пытаюсь выполнить команды, связанные с принтером, такие как lpshut
, lpadmin
и т.д. с помощью pbrun
.
Но появляется та же самая ошибка, как и выше.
Это проблема разрешения имен между submithost, на котором вы выполняете pbrun, и Masterhost.
Для переменной “clienthost”, pbrun сначала получает имя хоста (т.е. команду hostname), затем получает IP-адрес возвращенного имени хоста, а затем pbrun делает обратное разрешение IP-адреса на submithost и заполняет переменную “clienthost” этим результатом. (Прямое и обратное разрешение имен важно)
Переменная “host” будет такой же, как “clienthost”, если -h не используется с pbrun.
Переменная “host” — это значение, переданное pbrun с переключателем -h. Если значение runhost не явно задано в политике, его значение берется из host.
Submithost — это обратное разрешенное имя хоста на masterhost на основе IP-адреса, который взят из исходного IP-адреса в заголовке IP-пакета.
На submithost имя хоста устанавливается на короткое имя, так как оно возвращается системным вызовом getent для его IP.
На Masterhost submithost устанавливается на FQDN, так как оно возвращается системным вызовом getent для исходного IP submithost.
Частично это связано с тем, что submithost разрешается через файлы, /etc/hosts имеет короткое имя в качестве канонического имени, а masterhost выполняет DNS-разрешение, возвращая FQDN.
Решение этой проблемы заключается в изменениях разрешения имен или изменений в политике.
Изменение разрешения имен может заключаться в редактировании файла /etc/hosts на submithost, чтобы каноническое имя было FQDN.
Изменения в политике могут заключаться либо в настройке runhost на submit host, чтобы оба были одинаковыми, либо, что может быть лучше, при выполнении сравнений имен хостов можно сделать сравнение коротких имен.
Где-то в вашей политике у вас есть что-то вроде:
if (submithost != runhost) {
print{"Вам НЕ разрешено использовать pbrun -h <remotehost> ls."};
print{"Пожалуйста, попробуйте снова без опции -h.\n\n"};
print{"Хост:", host};
print{"Submithost:", submithost};
reject;
}
Вам нужно изменить ваше условие на что-то вроде:
if (split(submithost,".")[0] != split(runhost,".")[0]) {
Это выполнит явное сравнение имен хостов короткого имени.
Если у вас уже есть функция, которая это делает, или если вы используете образец политики pblibs.conf, то для этого есть определенная функция.
#
# Функция GetShortName принимает имя хоста и возвращает
# короткое имя FQDN, или просто возвращает короткое имя, если
# короткое имя было передано в качестве аргумента. Эта функция требует
# одного аргумента, строки для имени хоста.
# Чтобы вызвать функцию:
# GetShortName("test.beyondtrust.com");
# GetShortName(masterhost);
#
function GetShortName(SomeHostName) {
GetShortName = split(SomeHostName,".")[0];
}
Попробуйте с
pbrun -h "имя машины"
или
pbrun -h "имя машины" pbksh
Ответ или решение
Данное сообщение об ошибке, возникающее при исполнении команды pbrun
, вызвано проблемами с разрешением имен между подчиненным хостом (submithost) и основным хостом (masterhost). Давайте рассмотрим более подробно, как это связано с основными понятиями и что можно сделать для устранения проблемы.
Причина проблемы
Когда вы используете команду pbrun
, она обрабатывает несколько шагов разрешения имен:
- Получение имени хоста:
pbrun
сначала получает имя хоста с помощью командыhostname
. - Получение IP-адреса: Затем она получает IP-адрес по имени хоста.
- Обратное разрешение IP: После этого
pbrun
выполняет обратное разрешение IP-адреса на подчиненном хосте, что заполняет переменнуюclienthost
.
Переменная host
будет такой же, как clienthost
, если флаг -h
не используется. Вместе с тем, если вы используете -h
, то host
будет равен значению, переданному с флагом -h
.
Таким образом, если на подчиненном и основном хостах есть несоответствие в иерархии имен (например, короткие имена на подчиненном хосте и полные доменные имена на основном хосте), это может привести к ошибке Request rejected by pbmasterd
, как в вашем случае.
Решение
Чтобы устранить проблему, у вас есть несколько вариантов:
-
Корректировка разрешения имен:
- Отредактируйте файл
/etc/hosts
на подчиненном хосте, чтобы включить полное доменное имя (FQDN) для соответствующих IP-адресов. Убедитесь, что для IP-адреса вашего подчиненного хоста указано корректное полное доменное имя.
- Отредактируйте файл
-
Корректировка политик pbrun:
- В вашей политике
pbrun
, замените логику сравнения имен. В настоящее время у вас может быть нечто подобное:
if (submithost != runhost) { print{"You are NOT allowed to use pbrun -h <remotehost> ls."}; print{"Please try again without -h option.\n\n"}; print{"Host:", host}; print{"Submithost:", submithost}; reject; }
Измените это на сравнение коротких имен:
if (split(submithost,".")[0] != split(runhost,".")[0]) { print{"You are NOT allowed to use pbrun -h <remotehost> ls."}; print{"Please try again without -h option.\n\n"}; print{"Host:", host}; print{"Submithost:", submithost}; reject; }
Таким образом, вы сможете сравнивать только части имен до первой точки, игнорируя доменные суффиксы.
- В вашей политике
-
Использование функции для получения короткого имени:
- Вы также можете использовать функцию
GetShortName
, которая позволяет упростить этот процесс:
function GetShortName(SomeHostName) { return split(SomeHostName,".")[0]; } if (GetShortName(submithost) != GetShortName(runhost)) { // Обработка ошибки }
- Вы также можете использовать функцию
Альтернативный способ вызова команд
Если вы намереваетесь запускать команды, такие как lpshut
или lpadmin
, попробуйте использовать следующие команды:
pbrun -h "имя_машины" lpshut
или
pbrun -h "имя_машины" pbksh
где "имя_машины"
— это корректное имя вашего подчиненного хоста.
Заключение
Проблема с выполнением команды pbrun
в вашем случае связана с несовпадением имён хостов. Корректировка разрешения имен или политик pbrun
должна помочь в решении этой проблемы. Обязательно протестируйте изменения и убедитесь, что они устраняют ошибку.