![Pbrun 不允许执行命令](https://linux22.com/image/53942/Pbrun%20%E4%B8%8D%E5%85%81%E8%AE%B8%E6%89%A7%E8%A1%8C%E5%91%BD%E4%BB%A4.png)
pbrun
为什么我执行的时候会出现这样的情况
$ pbrun ls
You are NOT allowed to use pbrun -h <remotehost> ls.
Please try again without -h option.
Host: xxxx
Submithost: xxxx.abcd.xyz.com
pbrun7.5.0-12[404]: Request rejected by pbmasterd on server1234.abcd.yyyy.com.
我实际上正在尝试使用 执行打印机相关命令,例如lpshut
、lpadmin
等pbrun
。
但它会抛出如上所述的确切错误。
答案1
这是您运行 pbrun 的提交主机和 Masterhost 之间的名称解析问题。
对于变量“clienthost”,pbrun 首先获取主机名(即主机名命令),然后 pbrun 获取返回的主机名的 ip 地址,最后,pbrun 反向解析提交主机上的 ip 地址并用此填充“clienthost”变量结果。 (正向和反向名称解析很重要)
如果 -h 未与 pbrun 一起使用,则变量“host”将与“clienthost”相同。
变量“host”是使用 -h 开关传递给 pbrun 的值。如果策略中没有显式设置 runhost 的值,则其值来自 host。
Submithost 是 masterhost 上基于从 IP 数据包标头中的源 IP 地址获取的 IP 地址的反向解析主机名。
在提交主机上,主机被设置为其 IP 的 getent 系统调用返回的短名称。
在 Masterhost 上,submithost 被设置为 FQDN,因为该 FQDN 由 getent 系统调用返回,以获取提交主机的源 IP。
部分原因是提交主机通过文件进行解析,/etc/hosts 将短名称作为规范名称,并且主主机正在执行 DNS 解析并返回 FQDN。
解决这个问题可以通过名称解析更改或策略更改来解决。
名称解析可以编辑提交主机上的 /etc/hosts 文件,以将规范名称设置为 FQDN。策略更改可以是将运行主机设置为提交主机,因此两者相同,或者可能更好,在进行主机名比较时,您可以进行短名称比较。
在您的保单中,您有类似以下内容:
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]) {
这将进行显式的短名称主机名比较。如果您已经有一个函数可以执行此操作,或者正在使用 pblibs.conf 示例策略,则有一个为此定义的函数。
#
# The function GetShortName will take a host name and return the
# short name of the FQDN, or just return the shortname if the
# the short name was passed as the argument. This function requires
# one argument, a string for the hostname.
# To call the function:
# GetShortName("test.beyondtrust.com");
# GetShortName(masterhost);
#
function GetShortName(SomeHostName) {
GetShortName = split(SomeHostName,".")[0];
}
答案2
尝试用
pbrun -h "machine name"
或者
pbrun -h "machine name" pbksh