SSH 推送联系方法

SSH Push (ssh-push) 用于 Salt 客户端无法直接访问 SUSE Multi-Linux Manager 服务器的环境。 在此环境中,客户端位于称为 DMZ 的防火墙保护区。 DMZ 内的任何系统都无权打开与内部网络的连接,内部网络中有 SUSE Multi-Linux Manager 服务器。

SSH Push 仅从 SUSE Multi-Linux Manager 到客户端打开隧道,但反向通道是直接的。 这种场景可能并不适用于所有地方。 因此,SSH Push(带隧道)也可作为联系方法。 这也打开了一个反向隧道,因此您可以通过所有防火墙进行通信,否则可能会阻止客户端与服务器之间的连接。

如果无法在客户端上安装守护程序代理,也可以使用 SSH 推送。

SSH Push 方法有严重的限制。 它的扩展性较差,消耗的服务器资源和网络带宽比普通 Salt 方法 (default) 更多。 Push SSH 方法根本不支持大型设置(1000 个客户端及以上)。

服务器使用 SSH 推送来定期联系客户端,以签入和执行安排的操作和事件。

在使用 SSH 推送方法管理的客户端上,目前不支持使用置备模式重新安装系统。

此图演示了 SSH Push 过程路径。 Taskomatic 块左侧的所有项目表示在 SUSE Multi-Linux Manager 客户端上运行的进程。

salt ssh contact taigon

要使用 SSH Push,您必须在客户端上运行 SSH 守护程序,并且该守护程序可以被在 SUSE Multi-Linux Manager 服务器上运行的 salt-api 守护程序访问。 此外,所需的 Python 版本将与 Salt 包一起部署到客户端系统。

在开始以下注册程序之前,请定义一个配置了 SSH Push 联系方法的激活密钥。 此方法期望与服务器之间有直接的 HTTPS 连接。

您需要使用 Web UI 或 API 将这些客户端注册到 SUSE Multi-Linux Manager 服务器。 请参见以下程序或示例。

过程:升级使用 SSH Push 注册客户端
  1. 在 SUSE Multi-Linux Manager Web UI 中,导航到 系统  引导 并填写相应字段。

  2. 选择配置了 SSH Push 联系方法的激活密钥。 有关激活密钥的更多信息,请参见 激活密钥

  3. 选中 Manage system completely via SSH 复选框。

  4. 单击 启动 开始注册。

  5. 导航到 系统  概览,确认系统已正确注册。

示例:通过 API 使用 SSH Push 方法

您可以使用 API 管理要使用的联系方法。 此示例 Python 代码将联系方法设置为 ssh-push

有效值为:

  • default(拉取)

  • ssh-push

  • ssh-push-tunnel

client = xmlrpclib.Server(MLM_HOST + "/rpc/api", verbose=0)
key = client.auth.login(MLM_LOGIN, MLM_PASSWORD)
client.system.setDetails(key, 1000012345, {'contact_method' : 'ssh-push'})

1. 可用参数

在配置 SSH Push 时,您可以修改在系统注册时使用的参数,包括主机、激活密钥和密码。 密码仅用于启动,不会被保存。 所有未来的 SSH 会话都通过密钥/证书对进行授权。 这些参数在 系统  启动 中配置。

您也可以配置在系统范围使用的持久性参数,包括配置 sudo 用户来以非特权用户而不是 root 身份访问系统。

在服务器容器内运行步骤之前,请使用 mgrctl term

过程:升级配置非特权 SSH 访问
  1. 确保您在 SUSE Multi-Linux Manager 服务器上安装了最新的 spacewalk-taskomaticspacewalk-certs-tools 软件包。

  2. 在每个客户端系统上,创建相应的非特权用户。

  3. 在每个客户端系统上,编辑 sudoers 文件:

    sudo visudo
  4. 通过在 sudo 文件末尾添加这一行,授予用户 sudoers 访问权限。 将 <user> 替换为在 Web UI 中启动客户端的用户的名称:

    <user>  ALL=NOPASSWD: /usr/bin/python3, /var/tmp/venv-salt-minion/bin/python

    此过程授予 root 访问权限,无需密码,这对于注册客户端是必需的。 当客户端成功安装后,它以 root 权限运行,因此不再需要访问权限。 我们建议在客户端成功安装后,从 sudoers 文件中去除该行。

  5. 在 SUSE Multi-Linux Manager 服务器容器内,编辑 /etc/rhn/rhn.conf 配置文件,并添加或修改下面一行以包含非特权用户名:

    ssh_push_sudo_user = <user>
  6. 更改此配置参数后,您必须重启 salt-secrets-config.servicetomcat.servicetaskomatic.service 等服务。 为了覆盖所有所需的服务,最好以根用户身份重启 SUSE Multi-Linux Manager 服务器。 在容器外,从容器主机输入:

    mgradm restart

2. 操作的执行

SSH Push 功能使用 Taskomatic 通过 salt-ssh 执行计划操作。 taskomatic 作业定期检查计划操作并执行它们。 SSH Push 功能根据计划操作执行完整的 salt-ssh 调用。

默认情况下,可以同时执行二十个 Salt SSH 操作。 您可以通过将这些行添加到配置文件中,并将 parallel_threads 的值向上调整,来增加可以并行执行的操作数量。 我们建议您保持并行操作的数量较低,以避免问题:

taskomatic.sshminion_action_executor.parallel_threads = <number>
org.quartz.threadPool.threadCount = <value of parallel_threads + 20>

这会调整在任何一个客户端上可以并行运行的操作数量以及 taskomatic 使用的工作线程总数。 如果需要在多个客户端上运行操作,则操作始终在每个客户端上按顺序执行。

如果客户端通过代理连接,则需要调整代理上的 MaxSessions 设置。 在这种情况下,将并行连接的数量设置为客户端总数的三倍。

3. 未来的功能

有一些功能尚不支持 SSH Push。 这些功能在 Salt SSH 客户端上无法使用:

  • OpenSCAP 审计

  • 导致以下事件的信标:

    • 使用 zypper 在系统上安装软件包不会调用软件包刷新。

    • 如果虚拟主机系统基于 Salt SSH,则虚拟主机功能(例如 Guest 主机)将无法正常工作。

更多信息: