SSH 推送联系方法

SSH 推送 (ssh-push) 用于 Salt 客户端无法直接访问 SUSE Manager 服务器的环境。在此环境中,客户端位于受防火墙保护的区域(称为 DMZ)。DMZ 内的所有系统均无权打开连至 SUSE Manager 服务器所在内部网络的连接。

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

SSH 推送方法存在严重的局限性。它的缩放能力不是很好,并且比普通 Salt 方法(默认)消耗的服务器资源和网络带宽更多。大型设置(1000 或更多个客户端)完全不支持 SSH 推送方法。

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

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

下图说明了 SSH 推送的进程路径。Taskomatic 块左侧的各项表示在 SUSE Manager 客户端上运行的进程。

salt ssh contact taigon

要使用 SSH 推送,必须在客户端上运行 SSH 守护程序,并且 SUSE Manager 服务器上运行的 salt-api 守护程序必须能够访问 SSH 守护程序。此外,将使用 Salt 捆绑包在客户端系统上部署所需的 Python 版本。

在开始执行以下注册过程之前,请先在配置了 SSH 推送联系方法的情况下定义一个激活密钥。此方法要求与服务器建立 HTTPS 直接连接。

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

过程:使用 SSH 推送注册客户端
  1. 在 SUSE Manager Web UI 中,导航到系统  引导,然后填写相应的字段。

  2. 选择一个配置了 SSH 推送联系方法的激活密钥。有关激活密钥的详细信息,请参见 激活密钥

  3. 选中完全通过 SSH 管理系统复选框。

  4. 单击 Bootstrap 开始注册。

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

示例:通过 API 使用 SSH 推送方法

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

有效值为:

  • default (pull)

  • ssh-push

  • ssh-push-tunnel

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

1. 可用参数

如果您要配置通过 SSH 推送,可以修改注册系统时使用的参数,包括主机、激活密钥和口令。口令只能用于引导,不会保存在任何位置。所有将来的 SSH 会话均通过密钥/证书对获得授权。这些参数在系统  引导中配置。

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

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

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

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

    sudo visudo
  4. sudoers 文件末尾添加下面一行,以向用户授予 sudo 访问权限。以在 Web UI 中引导客户端的用户的名称替换 <user>

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

    此过程无需口令便可授予 root 访问权限,而注册客户端需要提供口令。客户端成功安装后会以 root 特权运行,因此将不再需要该访问权限。客户端成功安装之后,建议您从 sudoers 文件中去除该行。

  5. 在 SUSE Manager 服务器上,于 /etc/rhn/rhn.conf 配置文件中添加或修改下面一行以包含非特权用户名:

    ssh_push_sudo_user = <user>

更改此配置参数后,必须重启动 salt-secrets-config.servicetomcat.servicetaskomatic.service 等服务。为了涵盖全部所需服务,最好以 root 身份重启动 SUSE Manager 服务器:

mgradm restart

2. 操作的执行

SSH 推送功能使用 taskomatic 来通过 salt-ssh 执行安排的操作。taskomatic 作业会定期检查并执行安排的操作。SSH 推送功能根据安排的操作执行完整的 salt-ssh 调用。

默认可以同时执行 20 项 Salt SSH 操作。您可以在配置文件中添加下面几行,并上调 parallel_threads 的值,以增加可同时执行的操作数。建议您将并行操作数设置为较低的值,以免出现问题:

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

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

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

3. 未来的功能

SSH 推送目前尚不受支持某些功能。这些功能在 Salt SSH 客户端上不可用:

  • OpenSCAP 审计

  • 导致以下事件的信标:

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

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

3.1. 更多信息