SaltStack - 通过 SSH 使用 Salt

Salt 使用 salt-minion 在远程系统中执行命令。这是正常行为。在某些情况下,只能通过 SSH 协议访问远程系统。对于这些情况,Salt 提供了一个选项,仅使用 SSH 协议连接远程系统并通过 SSH 层执行命令。

Salt SSH 非常容易配置。唯一需要的配置是在名为 Roster 文件 的特殊文件中指定远程系统详细信息。此 roster 文件通常位于 /etc/salt/roster。roster 文件将包含有关远程系统的所有信息以及我们如何连接到它。配置名册文件后,所有 Salt 命令都使用 salt-ssh 而不是 salt 命令执行。

名册文件

名册系统专为 Salt SSH 设计。它被设计为可插入系统。名册系统的唯一目的是收集有关远程系统的信息。名册文件是一个 基于 YAML 的配置文件,其中包含远程系统信息作为 目标。这些目标是具有一组预定义属性的特殊数据结构。名册文件包含一个或多个目标,每个目标由 Salt ID 标识。

名册文件的基本结构如下 −

<Salt ID>:
   host: <host name>
   user: <user name>
   passwd: <password of the user>

roster 文件支持的所有其他属性都是可选的。它们如下 −

  • port − SSH 端口号。

  • sudo − 是否通过 sudo 运行命令。

  • sudo_user − sudo 用户名。

  • tty − 如果启用了 sudo,则为 true。

  • priv − 私钥。

  • timeout − SSH 连接超时。

  • minion_opts − minion opts 字典。

  • thin_dir − 目标系统的 salt 组件存储目录。

  • cmd_umask − 强制 salt-call 命令的 umask。

示例名册文件如下 −

web:
   host: 192.168.2.1
   user: webuser
   passwd: secret
   sudo: True   
db:
   host: 192.168.2.2

部署 SSH 密钥

Salt SSH 将为 SSH 登录生成默认公钥/私钥对。默认路径为 /etc/salt/pki/master/ssh/salt-ssh.rsa。可以使用 ssh-copy-id 命令将此密钥部署到远程系统,如下所示。

ssh-copy-id -i /etc/salt/pki/master/ssh/salt-ssh.rsa.pub user@web.company.com

执行命令

执行 salt 命令非常简单,只需将 salt cli 命令更改为 salt-ssh 即可,如下所示。

salt-ssh '*' test.ping

原始 Shell 命令

Salt SSH 提供了一个选项 (-r),用于在远程系统中执行原始命令,绕过 salt 模块和功能。

salt-ssh '*' -r 'ls'

使用 Salt SSH 进行定位

在 Salt SSH 中定位远程系统仅支持 glob 和 regex 目标。由于 Salt SSH 是一个单独的模块,因此它目前仅提供有限的选项,并将在不久的将来提供更多功能。