SSH 推送(使用隧道)联系方法

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

换言之:SSH 推送(利用隧道)还会创建从客户端到 SUSE Multi-Linux Manager 服务器的反向隧道,而不仅是从服务器到客户端的隧道。

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

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

隧道用于通过加密隧道提供对服务器的访问。 分配给 SSH 推送客户端(利用隧道)的仓库仅通过此隧道提供,因此无法直接从客户端系统使用软件包管理工具,因为仓库仅在隧道开启时可用。 换句话说,只有在服务器发起会话时才能访问。 客户端上的所有软件包管理操作只能从服务器端执行。

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

对于通过 SSH 建立隧道的连接,需要指定一个端口号,该端口用于通过 HTTPS 进行隧道通信。 默认使用的端口号是 1233。 要覆盖它,您可以在容器内,将大于 1024 的自定义端口号添加到 /etc/rhn/rhn.conf

ssh_push_port_https = high_port

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

mgradm restart

出于安全原因,您可能需要结合使用 sudo 和 SSH,以非特权用户身份而不是 root 身份访问系统。

过程:升级配置非特权 SSH 访问
  1. 在每个客户端系统上,创建相应的非特权用户。

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

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

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

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

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

    ssh_push_sudo_user = <user>

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

mgradm restart

您需要使用 Web UI 或 API 将这些客户端注册到 SUSE Multi-Linux Manager 服务器。

在开始之前,您需要确保已指定用于 SSH 隧道的端口。 如果在更改端口号之前已注册客户端,则需要使用重新激活密钥重新注册。

示例:通过 API 访问 SSH 推送(利用隧道)

您可以使用 API 管理要使用的联系方法。 此示例 Python 代码将联系方法设置为 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-tunnel'})

有效值为:

  • default(拉取)

  • ssh-push

  • ssh-push-tunnel