salt ssh,agentless模式

salt ssh

执行salt commands及states通过ssh,不需要安装salt-minion.

开始

salt ssh方式使用非常简单,通过配置/etc/salt/roster文件定义系统需要连接的主机,salt-ssh命令使用方式跟salt相同.

  • salt ssh在2014.7.0版本产品化
  • 远端需要有至少python2.6(也可以使用-r选项发送原子的ssh命令)
  • 大多数系统中都是使用salt-ssh命令执行
  • salt ssh并不是用来替代标准的salt通信系统,它提供了不需要zeromq和远程agent的一个选择.由于所有通信都是通过ssh会在速度上慢于salt+zeromq
  • 目前fileserver选项必须会封装,确保关联的文件会使用salt-ssh交付.state模块是例外,在master端编译,进程会找到所有salt://路径指向然后复制打tar包,fileserver封装还在开发中.

salt ssh roster

salt roster系统轻松定义远程minions.https://docs.saltstack.com/en/latest/topics/ssh/roster.html#ssh-roster

默认roster文件是在/etc/salt/roster:

1
2
3
4
5
6
7
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
1
2
3
Note

sudo works only if NOPASSWD is set for user in /etc/sudoers: fred ALL=(ALL) NOPASSWD: ALL

salt-ssh部署ssh key

默认salt-ssh将为ssh生成密钥对,默认路径是/etc/salt/pki/master/ssh/salt-ssh.rsa.密钥对将在第一次运行salt-ssh命令时生成.

之后使用ssh-copy-id命令部署公钥到minions.

1
ssh-copy-id -i /etc/salt/pki/master/ssh/salt-ssh.rsa.pub user@server.demo.com

可以创建一个简单的脚本:

1
2
3
4
5
6
#!/bin/bash
if [ -z $1 ]; then
echo $0 user@host.com
exit 0
fi
ssh-copy-id -i /etc/salt/pki/master/ssh/salt-ssh.rsa.pub $1
1
2
./salt-ssh-copy-id.sh user@server1.host.com
./salt-ssh-copy-id.sh user@server2.host.com

当公钥部署完成后,salt-ssh就可以控制这些minions了.

调用salt-ssh

RHEL/centos 5 python2.6

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

python3.x
在2017.7.0版本之前,salt是不支持python3.x,最好使用-r参数.
salt-ssh的使用方法跟salt基本相同,有着相似的语法
默认salt-ssh使用在远程minions上使用salt执行模块,使用-r会使用raw shell命令

1
salt-ssh '*' test.ping

salt ssh 使用state

salt ssh 使用state系统与salt一样抽象了相同的接口.

salt ssh 使用target

只支持glog与regex targets

配置salt ssh

还是在/etc/salt/master中.
Minion 配置选项可以在master配置中的ssh_minion_opts中配置,也可以在roster中的minion_opts中配置.

salt-ssh使用非root用户

默认salt读取/etc/salt配置.如果你使用普通用户必须修改pki_dir和cachedir路径,否则会报权限错误.
推荐为普通用户创建单独的配置文件并使用-c加载.

使用saltfile定义命令行参数

使用saltfile定义命令行参数,可以在一台服务器上管理多个不同的salt项目.
可以cd到saltfile的目录执行

1
2
3
4
salt-ssh:
config_dir: path/to/config/dir
ssh_max_procs: 30
ssh_wipe: True

salt-ssh –config-dir=path/to/config/dir –max-procs=30 –wipe * test.ping
使用saltfile可简化成
salt-ssh * test.ping.

saltssh debug

salt-ssh 加 -ltrace 参数或定义SALT_ARGV变量.

坚持原创技术分享,您的支持将鼓励我继续创作!