通过 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>