Skip to content

Latest commit

 

History

History
231 lines (171 loc) · 11.2 KB

13.Salt-SSH.md

File metadata and controls

231 lines (171 loc) · 11.2 KB

Salt SSH

通过ssh执行salt命令和状态,而无需安装salt-minion。

Getting Started - 入门

Salt SSH非常易于使用,只需设置一个系统的roster基本名册文件即可以类似于标准salt命令的方式连接并运行salt-ssh命令。

  • Salt ssh从2014.7.0版开始具备了投入生产环境使用的条件
  • 在远程目标系统上需要安装有Python(除非使用 -r 选项发送原始ssh命令)
  • 在许多系统上,salt-ssh可执行文件将位于其自己的程序包中,包名通常为salt-ssh
  • Salt SSH系统不会取代标准的Salt通信系统,它只是提供了一个基于SSH的替代方案,不需要ZeroMQ和远程代理。请注意,由于与Salt SSH的所有通信都是通过SSH执行的,因此它比带有ZeroMQ的标准Salt实现慢得多。
  • 目前,必须对文件服务器操作做额外的包装,以确保使用salt-ssh命令传递相关文件。状态模块是一个例外,它将编译在master服务器上运行的状态,并在该过程中查找对salt://路径的所有引用,并将这些文件复制到与状态运行相同的tarball中。此外,所需的文件服务器包装程序仍在开发中。

Salt SSH Roster - 名册文件系统

Salt的roster(花名册)系统可轻松定义远程minions。

查看roster以了解更多的细节。

创建一个简单的 roster 文件, 默认的位置路径是 /etc/salt/roster:

web1: 192.168.42.1

上面是一个非常基本的roster文件,其中将Salt ID分配给IP地址。 我们可以创建更详细的名册:

web1:
  host: 192.168.42.1 # The IP addr or DNS hostname
  user: fred         # Remote executions will be executed as user fred
  passwd: foobarbaz  # The password to use for login, if omitted, keys are used
  sudo: True         # Whether to sudo to root, not enabled by default
web2:
  host: 192.168.42.2

只有在/etc/sudoers中为用户设置了NOPASSWD时,sudo才起作用:fred ALL =(ALL) NOPASSWD:ALL

Deploy ssh key for salt-ssh - 为salt-ssh部署和分发密钥文件

默认情况下,salt-ssh将为ssh生成密钥对,默认路径为/etc/salt/pki/master/ssh/salt-ssh.rsa。 首次运行salt-ssh时会生成密钥。

您可以使用ssh-copy-id(OpenSSH密钥部署工具)将密钥部署到服务器。

ssh-copy-id -i /etc/salt/pki/master/ssh/salt-ssh.rsa.pub [email protected]

也可以写成一个简单的shell脚本, 像下面 salt-ssh-copy-id.sh 这样:

#!/bin/bash
if [ -z $1 ]; then
   echo $0 [email protected]
   exit 0
fi
ssh-copy-id -i /etc/salt/pki/master/ssh/salt-ssh.rsa.pub $1

注意:确保使用chmod + x salt-ssh-copy-id.sh。

Be certain to chmod +x salt-ssh-copy-id.sh.

./salt-ssh-copy-id.sh [email protected]
./salt-ssh-copy-id.sh [email protected]

成功部署密钥后,即可使用salt-ssh对其进行控制。

另外,可以通过将priv设置为 agent-forwarding 来使用ssh代理转发。

Calling Salt SSH - 调用Salt SSH命令

注意

salt-ssh on RHEL/CentOS 5

salt-ssh命令至少需要python 2.6,默认情况下未在RHEL/CentOS 5上安装python 2.6。在这种情况下,一种简单的解决方法是使用 -r 选项运行安装python2.6的原始shell命令:

salt-ssh centos-5-minion -r 'yum -y install epel-release ; yum -y install python26'

注意

salt-ssh on systems with Python 3.x

Salt在2017.7.0发行版之前是不支持Python 3.x的,这是一个默认设置,例如使用广泛的16.04 LTS发行版Ubuntu。 对于这种情况,一个简单的解决方法是使用-r选项,类似于上面的示例:

salt-ssh ubuntu-1604-minion -r 'apt update ; apt install -y python-minimal'

这时就可以轻松使用salt-ssh命令了:

salt-ssh '*' test.version

具有salt-ssh的命令遵循与salt命令相同的语法。

可以使用标准的Salt功能! 输出也与salt相同,并且有许多相同的参数标志可用。 有关所有可用选项,请参见http://docs.saltstack.com/ref/cli/salt-ssh.html。

Raw Shell Calls - 执行原始的Shell命令

默认情况下,salt-ssh在远程系统上运行Salt的执行模块,但是salt-ssh也可以执行原始shell命令:

salt-ssh '*' -r 'ifconfig'

States Via Salt SSH - 使用Salt SSH执行状态配置管理

Salt State系统也可以与salt-ssh一起使用。 状态系统为salt-ssh提供的抽象接口实现与使用标准salt时的接口相同。 目的是让那些为标准Salt定义的Salt Formulas公式与Salt-ssh无缝配合,反之亦然。

通过简单地将Salt命令替换为salt-ssh,即可实现切换为不同的方式执行标准的Salt State功能。

Targeting with Salt SSH -在Salt SSH中定位目标minions

由于目标minions定位的方法在salt-ssh中的实现有所不同,所以在撰写本文时仅支持glob和regex目标,因此仍然需要继续实现其余目标系统。

注意

默认情况下,虽然可以通过salt-ssh设置grains。但是,这些grains将不会在系统重新启动后继续存在。

有关更多详细信息,请参见roster文档中的"thin_dir"设置。

Configuring Salt SSH - 服务配置说明

Salt SSH从master配置文件获取其配置信息。 通常,此文件位于/etc/salt/master中。 如果希望使用自定义的配置文件,Salt SSH的-c选项可以方便地传递目录以在内部查找名为master的配置文件。

Minion Config - minion的参数配置

New in version 2015.5.1.

可以使用master配置选项ssh_minion_opts对全局性的Minion配置选项进行定义。 也可以使用roster名册中的minion_opts参数基于每个minion进行定义。

Running Salt SSH as non-root user - 使用非特权用户执行Salt SSH

默认情况下,Salt从/etc/salt/中读取所有配置。 如果您以普通用户身份运行Salt SSH,则必须修改某些路径,否则将收到"权限拒绝"的消息。 您必须修改两个参数:pki_dircachedir。 这些应该指向用户可写的完整路径。

建议不要为此目的修改/etc/salt。 而是为用户创建/etc/salt的私有副本,并使用-c /new/config/path运行salt-ssh命令。

Define CLI Options with Saltfile - 在CLI命令行工具中使用Saltfile配置文件

如果通常将CLI选项传递给salt-ssh,则可以创建Saltfile来自动使用这些选项。 需要在同一服务器上管理多个不同的Salt项目时,这是很常见的。

因此,您可以cd进入一个包含Saltfile文件的目录,其中包含以下YAML内容:

salt-ssh:
  config_dir: path/to/config/dir
  ssh_log_file: salt-ssh.log
  ssh_max_procs: 30
  ssh_wipe: True

此时,就不必调用 salt-ssh --config-dir = path/to/config/dir --max-procs = 30 --wipe \* test.version,而是可以直接调用salt-ssh \* test.version

布尔样式的选项应在其中使用YAML表示指定。

注意

指定的选项键必须与解析器salt.utils.parsers.SaltSSHOptionParser中指定的选项的目标属性匹配。 例如,在使用--wipe命令行选项的情况下,其dest配置为ssh_wipe,因此应在Saltfile中进行配置。 使用此选项的标志名称进行wipe: Truew: True,将不起作用。

注意

为了能够自动检测到Saltfile,需要将其命名为Saltfile,并使用大写字母S,并且可由运行salt-ssh的用户读取。

最后,您还可以创建〜/.salt/Saltfile,默认情况下salt-ssh将自动加载它。

Debugging salt-ssh - 调试方法

调试salt-ssh的一种常用方法是简单地使用salt传输到远程计算机的压缩包,然后直接调用salt-call

要确定salt-call的位置,只需使用-ltrace标志运行salt-ssh并查找包含字符串SALT_ARGV的行。 它包含salt-ssh尝试执行的salt-call命令。

建议您通过删除-l quiet--metadata--output json稍微修改一下此命令,以更好地了解目标系统的运行状况。

Salt Rosters - 花名册系统配置

Salt名册是在Salt 0.17.0中添加的可插拔系统,以简化Salt-ssh系统的使用。 之所以创建名册系统,是因为salt-ssh需要一种方法来识别需要针对哪些系统执行。

参见:roster modules

注意:无需在标准Salt系统中使用名册系统,因为Master初始设计思想是不需要知道目标系统,Salt Minion会将自身登记到Master中。

由于花名册系统是可插拔的,因此可以轻松进行扩充以连接到任何现有系统,以收集当前有哪些服务器可用以及可以使用salt-ssh进行管理控制。 默认情况下,名册文件位于/etc/salt/roster中。

How Rosters Work - 花名册系统是怎么运行的

名册系统会编译出一个内部称为 targets 的数据结构。 targets是一个目标系统的列表和有关如何连接到所述这些系统的属性信息。 Salt中的名册模块的唯一要求是返回 targets 数据结构。

Targets Data

可以存储在一个roster target中的信息如下:

<Salt ID>:       # The id to reference the target system with
    host:        # The IP address or DNS name of the remote host
    user:        # The user to log in as
    passwd:      # The password to log in with

    # Optional parameters
    port:        # The target system's ssh port number
    sudo:        # Boolean to run command via sudo
    sudo_user:   # Str: Set this to execute Salt as a sudo user other than root.
                 # This user must be in the same system group as the remote user
                 # that is used to login and is specified above. Alternatively,
                 # the user must be a super-user.
    tty:         # Boolean: Set this option to True if sudo is also set to
                 # True and requiretty is also set on the target system
    priv:        # File path to ssh private key, defaults to salt-ssh.rsa
                 # The priv can also be set to agent-forwarding to not specify
                 # a key, but use ssh agent forwarding
    priv_passwd: # Passphrase for ssh private key
    timeout:     # Number of seconds to wait for response when establishing
                 # an SSH connection
    minion_opts: # Dictionary of minion opts
    thin_dir:    # The target system's storage directory for Salt
                 # components. Defaults to /tmp/salt-<hash>.
    cmd_umask:   # umask to enforce for the salt-call command. Should be in
                 # octal (so for 0o077 in YAML you would do 0077, or 63)

Target Defaults

Master配置中的roster_defaults词典用于为名册中的minions设置默认登录变量,这样就不需要将相同的参数与命令行参数一起传递。

roster_defaults:
  user: daniel
  sudo: True
  priv: /root/.ssh/id_rsa
  tty: True

thin_dir

Salt需要将一个独立的软件运行环境上传到目标系统,该环境在默认情况下部署于/tmp/salt-<hash>。 该目录下的内容会受系统对临时文件管理的影响,比如会定时清理掉。

如果需要一个持久的Salt环境,例如设置持久化的grains信息,则需要更改此值。