SaltStack - Salt通过SSH

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

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

名册文件

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

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

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

名册文件支持的所有其他属性都是可选的.它们如下:<

  • port :  SSH端口号.

  • sudo : 是否通过sudo运行命令.

  • sudo_user :  sudo用户名.

  • tty : 如果启用了sudo,则为true.

  • priv : 私钥.

  • 超时 :  SSH连接超时.

  • minion_opts :  minion字典选择.

  • thin_dir : 目标系统的盐组件存储目录.

  • cmd_umask :  umask强制执行salt-call命令.

示例名单文件如下 :

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

Raw Shell Command

Salt SSH提供了一个选项(-r)来绕过salt模块和函数在远程系统中执行raw命令.

salt-ssh'*'-r'ls'

使用Salt SSH定位

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