第 12 章 在 Satellite 主机上运行作业
Red Hat Satellite 支持对主机上运行任意命令。这称为 远程执行。Satellite 服务器上默认启用远程执行,但必须在所有所需的胶囊服务器上手动启用。通信通过胶囊服务器进行,这意味着卫星服务器不需要直接访问目标主机,并且可以扩展来控制多个主机。远程执行使用 SSH 服务,该服务必须启用并在目标主机上运行。确保 Capsule 能够访问目标主机上的端口 22。
命令可以像自定义模板或分区表类似的方式进行自定义。默认包括几个作业模板,您可以使用它来运行命令。请参阅 第 12.2.1 节 “设置作业模板”。
注意
任何胶囊服务器的基础系统都是 Satellite 服务器内部胶囊的客户端,因此本节适用于连接到 Satellite 服务器的任何类型的主机,包括 Capsule 服务器。
您可以一次性对多个主机执行命令,您可以使用命令中的变量来适合您的部署。变量值可以通过主机事实、智能类参数、智能变量甚至主机参数来填充。另外,您可以在运行命令时为模板指定自定义值。请参阅 第 12.2.2 节 “执行作业”。
以下列表提供了如何使用远程执行的一些示例:
- 安装、更新或删除软件包
- 引导配置管理代理
- 触发 Puppet、Salt 或 Chef 运行
默认情况下,每个 Capsule 安装时禁用了远程执行功能。要在胶囊服务器上使用远程执行,您需要启用它。要启用,请运行以下命令:
若要验证远程执行是否在胶囊服务器上运行,并且 Web UI 中导航到 。胶囊服务器现在应当列在 SSH 正在运行的 功能 列中。
# satellite-installer --scenario capsule --enable-foreman-proxy-plugin-remote-execution-ssh
默认情况下,Satellite 服务器配置为使用远程执行,而不是 Katello Agent。如果需要,可以先创建自定义作业模板并在 Web UI 中选择这些新模板来 。对于您要更改的每个操作,选择标签,然后选择要使用的作业模板。
12.1. 为远程命令建立安全连接 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
在安装胶囊时,会自动创建用于远程执行的 SSH 密钥,并且设置位于
/etc/foreman-proxy/settings.d/remote_execution_ssh.yml 文件中。它们包括以下选项:
- ssh_identity_file
- 从中加载 SSH 密钥的文件。默认情况下,设置为
/usr/share/foreman-proxy/.ssh/id_rsa_foreman_proxy。 - local_working_dir
- 用于 Satellite 或 Capsule 上的目录,用于运行远程执行所需的脚本。默认情况下,设置为
/var/tmp。 - remote_working_dir
- 客户端系统上的目录,用于执行远程执行作业。默认情况下,设置为
/var/tmp。
注意
如果客户端系统为
/var/ 卷或文件系统设置了 noexec,请更改 remote_working_dir,否则远程执行任务将失败,因为无法执行该脚本。
如果需要使用替代目录,创建新目录,如 new_place,然后从默认目录中复制 SELinux 上下文。例如:
有关使用 SELinux 标签的更多信息,请参阅 SELinux 用户和管理员指南的维护 SELinux 标签部分。
# chcon --reference=/var new_place
为远程执行分发 SSH 密钥
要启用远程执行,请将公共 SSH 密钥从 Capsule 分发到您要管理的主机。确保 SSH 服务已启用并在主机上运行。配置任何网络或基于主机的防火墙,以启用对端口 22 的访问。
可以通过三种方法将公钥从 Capsule 分发到目标主机:
- 要手动分发密钥,请在 Capsule 上执行以下命令:
# ssh-copy-id -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy.pub root@target.example.com此处 target.example.com 是目标主机的主机名。对您要管理的每个目标主机重复此操作。要确认密钥已成功复制到目标主机,请在 Capsule 上执行以下命令:# ssh -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy root@target.example.com - 要使用 Satellite API 直接从 Capsule 下载公钥,请在每个目标主机上执行以下命令:
# curl https://myproxy.example.com:9090/ssh/pubkey >> ~/.ssh/authorized_keys此处的 myproxy.example.com 代表 Capsule 的主机名。 - 要在新置备的主机中包含公钥,请修改 Kickstart default finish 模板使其包含以下行:
<%= snippet 'remote_execution_ssh_keys' %>