SSH 推送联系方法

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

SSH 推送仅打开从 SUSE Multi-Linux Manager 到客户端的隧道,但反向通道会直接禁用。这种方法可能并非适用于所有情况。因此,还可以使用 SSH 推送(利用隧道)这种联系方法。该方法还会打开反向隧道,因此您可以穿越所有防火墙进行通信,如果没有反向隧道,这些防火墙可能会阻止从客户端到服务器的连接。

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

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

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

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

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

salt ssh contact taigon

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

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

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

过程:使用 SSH 推送注册客户端
  1. 在 SUSE Multi-Linux 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(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 推送,可以修改注册系统时使用的参数,包括主机、激活密钥和口令。口令只能用于引导,不会保存在任何位置。所有将来的 SSH 会话均通过密钥/证书对获得授权。这些参数在系统  引导中配置。

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

请在服务器容器内执行相应步骤之前使用 mgrctl term

过程:配置非特权 SSH 访问
  1. 确保您已在 SUSE Multi-Linux 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 Multi-Linux Manager 服务器容器内,编辑 /etc/rhn/rhn.conf 配置文件,并添加或修改下面一行以包含非特权用户名:

    ssh_push_sudo_user = <user>
  6. 更改此配置参数后,必须重启动 salt-secrets-config.servicetomcat.servicetaskomatic.service 等服务。 为了涵盖所需的全部服务,最好以 root 身份重启动 SUSE Multi-Linux 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 主机)将无法正常工作。

更多信息: