通过 SSH 推送
通过 SSH 推送方法用于传统客户端无法直接访问 SUSE Manager 服务器的环境。在此环境中,客户端位于受防火墙保护的区域,该区域称为 DMZ。DMZ 内的所有系统均无权打开连至内部网络(包括 SUSE Manager 服务器)的连接。
通过 SSH 推送方法会创建一个加密隧道,该隧道从内部网络上的 SUSE Manager 服务器连到位于 DMZ 中的客户端。执行完所有操作和事件之后,该隧道即会关闭。
服务器使用 SSH 定期联系客户端,以签入和执行安排的操作和事件。
该联系方法只适用于传统客户端。对于 Salt 客户端,请使用通过 Salt SSH 推送方法。
|
在使用通过 SSH 推送方法管理的客户端上,目前不支持使用置备模式重新安装系统。 |
下图说明了通过 SSH 推送的进程路径。Taskomatic 块左侧的各项表示在 SUSE Manager 客户端上运行的进程。
要通过 SSH 实现隧道连接,需要两个可用的端口号,一个用于建立 HTTP 隧道,另一个用于通过 HTTPS 建立隧道(只有注册期间需使用 HTTP)。默认会使用端口号 1232 和 1233。要重写这些端口号,您可以在 /etc/rhn/rhn.conf 中添加两个大于 1024 的自定义端口号:
ssh_push_port_http = high_port_1 ssh_push_port_https = high_port_2
如果您要使用客户端的主机名而非 IP 地址来联系客户端,请设置以下选项:
ssh_push_use_hostname = true
您还可以调整同时打开的客户端连接可使用的线程数。默认使用两个并行线程。请在 /etc/rhn/rhn. conf 中设置 taskomatic.ssh_push_workers:
taskomatic.ssh_push_workers = number
出于安全原因,您可能需要结合使用 sudo 和 SSH,以非特权用户身份而不是 root 身份访问系统。
-
确保您已在 SUSE Manager 服务器上安装最新的
spacewalk-taskomatic和spacewalk-certs-tools软件包。 -
在每个客户端系统上,创建相应的非特权用户。
-
在每个客户端系统上,打开
/etc/sudoers文件,注释掉下面几行:#Defaults targetpw # ask for the password of the target user i.e. root #ALL ALL=(ALL) ALL # WARNING! Only use this together with 'Defaults targetpw'!
-
在每个客户端系统上,于
用户特权指定部分添加下面几行:<user> ALL=(ALL) NOPASSWD:/usr/sbin/mgr_check <user> ALL=(ALL) NOPASSWD:/home/<user>/enable.sh <user> ALL=(ALL) NOPASSWD:/home/<user>/bootstrap.sh
-
在每个客户端系统上,于
/home/<user>/.bashrc文件中添加下面几行:PATH=$PATH:/usr/sbin export PATH
-
在 SUSE Manager 服务器上,于
/etc/rhn/rhn.conf配置文件中添加或修改下面一行以包含非特权用户名:ssh_push_sudo_user = <user>
由于客户端位于 DMZ 中并且无法访问服务器,您需要使用 mgr-ssh-push-init 工具将其注册到 SUSE Manager 服务器。
要使用该工具,您需要有客户端主机名或 IP 地址,以及 SUSE Manager 服务器上的有效引导脚本的路径。有关引导的详细信息,请参见 使用引导脚本注册客户端。
有关激活密钥的详细信息,请参见 激活密钥。
开始前,您需要确保已指定要用于 SSH 隧道的端口。如果您在更改端口号之前已注册客户端,则需要再次注册客户端。
|
使用通过 SSH 推送方法管理的客户端无法直接访问服务器。使用 |
-
在 SUSE Manager 服务器上的命令提示符处,以 root 身份执行以下命令:
# mgr-ssh-push-init --client <client> --register \ /srv/www/htdocs/pub/bootstrap/bootstrap_script --tunnel
可选:如果不想使用隧道,可以去除
--tunnel选项。 -
可选:如果您已定义
ssh_push_sudo_user,可以添加--notty选项以允许使用 root 口令。 -
校验 SSH 连接是否处于活动状态:
# ssh -i /root/.ssh/id_susemanager -R <high_port>:<susemanager>:443 \ <client> zypper ref
您可以使用 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'})
如果您要将某个已注册的客户端迁移为使用通过 SSH 推送方法,则需要执行一些额外的步骤。您可以使用 mgr-ssh-push-init 工具来设置客户端。
-
在 SUSE Manager 服务器上的命令提示符处,以 root 身份设置客户端:
# mgr-ssh-push-init --client <client> \ /srv/www/htdocs/pub/bootstrap/bootstrap_script --tunnel
-
使用 SUSE Manager Web UI 将客户端的联系方法更改为
ssh- push或ssh-push-tunnel。 -
可选:如果您需要编辑某个现有激活密钥,可以使用以下命令:
client.activationkey.setDetails(key, '1-mykey', {'contact_method' : 'ssh-push'})
对于使用代理进行连接的客户端,也可以使用通过 SSH 推送方法。开始前,请确保您的代理已更新。
-
在 SUSE Manager 代理上的命令提示符处,以 root 身份设置客户端:
# mgr-ssh-push-init --client <client> \ /srv/www/htdocs/pub/bootstrap/bootstrap_script --tunnel
-
在 SUSE Manager 服务器上的命令提示符处,将 SSH 密钥复制到代理上:
mgr-ssh-push-init --client <proxy>