热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CentOS7上安装配置salt-api

环境:CentOS7,已配置网络yum源安装salt-apisudoyuminstallsalt-api安装CherryPypipinstallChe

环境:CentOS 7,已配置网络yum源

 

安装salt-api

sudo yum install salt-api

安装CherryPy

pip install CherryPy

设置开机启动

systemctl enable salt-api.service
#chkconfig salt-api on    也行,在centos7中会自动转发请求到systemctl enable salt-api.service

 

生成自签名证书

[root@localhost melon]# cd /etc/pki/tls/certs/
[root@localhost certs]# ls
ca-bundle.crt  ca-bundle.trust.crt  make-dummy-cert  Makefile  renew-dummy-cert
[root@localhost certs]# make testcert
umask 77 ; \
/usr/bin/openssl genrsa -aes128 2048 > /etc/pki/tls/private/localhost.key
Generating RSA private key, 2048 bit long modulus
..................................................................+++
...................+++
e is 65537 (0x10001)
Enter pass phrase:           #输入密码
Verifying - Enter pass phrase:        #确认输入密码
umask 77 ; \
/usr/bin/openssl req -utf8 -new -key /etc/pki/tls/private/localhost.key -x509 -days 365 -out /etc/pki/tls/certs/localhost.crt -set_serial 0
Enter pass phrase for /etc/pki/tls/private/localhost.key:        #再次输入密码
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN        #填写资料,可选填
State or Province Name (full name) []:Hangzhou
Locality Name (eg, city) [Default City]:Hangzhou
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:851194999@qq.com

解密key文件,生成无密码的key文件

[root@localhost certs]# cd /etc/pki/tls/private/
[root@localhost private]# openssl rsa -in localhost.key -out localhost_nopass.key
Enter pass phrase for localhost.key:        #输入之前设置的密码
writing RSA key

 

为salt-api创建用户并设定密码,这里的用户名是saltapi

[root@localhost certs]# useradd -M -s /sbin/nologin saltapi
[root@localhost certs]# passwd saltapi

 

在/etc/salt/master.d下增加两个配置文件 api.conf 和 eauth.conf

api.conf

rest_cherrypy:
  port: 8888
  ssl_crt: /etc/pki/tls/certs/localhost.crt
  ssl_key: /etc/pki/tls/private/localhost_nopass.key

eauth.conf(该配置文件配置的是给予saltapi用户哪些模块的使用权限)

external_auth:
  pam:
    saltapi:
      - .*
      - '@wheel'
      - '@runner'

 

最后启动salt-api并重启salt-master,安装完成

systemctl start salt-api.service
systemctl restart salt-master.service 

 

Salt-API测试

登录获取token

[root@localhost master.d]# curl -k https://192.168.0.104:8888/login -H "Accept: application/x-yaml" -d username='saltapi' -d password='123456' -d eauth='pam'
return:
- eauth: pam
  expire: 1479955477.95815
  perms:
  - .*
  - '@wheel'
  - '@runner'
  start: 1479912277.958149
  token: 6f2d635110d366bb0003824629f9ccad22f31c7b
  user: saltapi

 

获取token之后就可以拿着这个token进行通信

两者执行效果一样

[root@localhost private]# salt '*' test.ping
minion_104:
    True
[root@localhost private]# curl -k https://192.168.0.104:8888/ -H "Accept: application/x-yaml" -H "X-Auth-Token: 6f2d635110d366bb0003824629f9ccad22f31c7b" -d client='local' -d tgt='*' -d fun='test.ping'
return:
- minion_104: true
[root@localhost private]# 

 

更多的可执行模块请查看官方文档

 

下面附上一个python中的salt-api类

#!/usr/bin/env python
#coding=utf-8
import json,re
import urllib
import urllib2

#import ssl
#ssl._create_default_https_cOntext= ssl._create_unverified_context

class SaltAPI(object):
    def __init__(self,url,username,password):
        self.__url = url    #salt-api监控的地址和端口
        self.__user = username     #salt-api用户名
        self.__password = password     #salt-api用户密码
        self.__token_id = self.salt_login()

    def salt_login(self):
        '''获取token'''
        params = {'eauth': 'pam', 'username': self.__user, 'password': self.__password}
        print(params)
        encode = urllib.urlencode(params)
        obj = urllib.unquote(encode)
        headers = {'X-Auth-Token':''}
        url = self.__url + '/login'
        print("url:",url)
        req = urllib2.Request(url, obj, headers)
        opener = urllib2.urlopen(req)
        print (opener)
        content = json.loads(opener.read())
        try:
            token = content['return'][0]['token']
            print("token:",token)
            return token
        except KeyError:
            raise KeyError

    def postRequest(self, obj, prefix='/'):
        '''发送请求'''
        url = self.__url + prefix
        headers = {'X-Auth-Token':self.__token_id,}
        req = urllib2.Request(url, obj, headers)
        opener = urllib2.urlopen(req)
        content = json.loads(opener.read())
        return content

    def saltCmd(self, params):
        '''命令执行'''
        obj = urllib.urlencode(params)
        obj, number = re.subn("arg\d", 'arg', obj)
        res = self.postRequest(obj)
        return res['return']

def main():
    sapi = SaltAPI(url='https://192.168.0.104:8888',username='saltapi',password='123456')
    #params = {'client':'local', 'fun':'test.ping', 'tgt':'某台服务器的key'}
    params = {'client':'local', 'fun':'test.ping', 'tgt':'*'}
    #params = {'client':'local', 'fun':'cmd.run', 'tgt':'*','arg1':'ifconfig'}
    test = sapi.saltCmd(params)
    print (test)

if __name__ == '__main__':
    main()
View Code

 

参考链接:https://www.xiaomastack.com/2014/11/18/salt-api/


推荐阅读
  • ElasticSearch 集群监控与优化
    本文详细介绍了如何有效地监控 ElasticSearch 集群,涵盖了关键性能指标、集群健康状况、统计信息以及内存和垃圾回收的监控方法。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本文介绍如何通过更改软件源来提前体验Ubuntu 8.10,包括详细的配置步骤和相关注意事项。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 华为USG基于源地址的多出口策略路由配置
    网络拓扑如下:组网情况:企业用户主要有技术部(VLAN10)和行政部(VLAN20),通过汇聚交换机连接到USG。企业分别通过两个不同运营商(ISP1和ISP2)连接到 ... [详细]
  • 深入解析TCP/IP五层协议
    本文详细介绍了TCP/IP五层协议模型,包括物理层、数据链路层、网络层、传输层和应用层。每层的功能及其相互关系将被逐一解释,帮助读者理解互联网通信的原理。此外,还特别讨论了UDP和TCP协议的特点以及三次握手、四次挥手的过程。 ... [详细]
  • 配置多VLAN环境下的透明SQUID代理
    本文介绍如何在包含多个VLAN的网络环境中配置SQUID作为透明网关。网络拓扑包括Cisco 3750交换机、PANABIT防火墙和SQUID服务器,所有设备均部署在ESXi虚拟化平台上。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
  • Symfony是一个功能强大的PHP框架,以其依赖注入(DI)特性著称。许多流行的PHP框架如Drupal和Laravel的核心组件都基于Symfony构建。本文将详细介绍Symfony的安装方法及其基本使用。 ... [详细]
  • 本文将详细介绍如何在没有显示器的情况下,使用Raspberry Pi Imager为树莓派4B安装操作系统,并进行基本配置,包括设置SSH、WiFi连接以及更新软件源。 ... [详细]
  • 搭建Jenkins、Ant与TestNG集成环境
    本文详细介绍了如何在Ubuntu 16.04系统上配置Jenkins、Ant和TestNG的集成开发环境,涵盖从安装到配置的具体步骤,并提供了创建Windows Slave节点及项目构建的指南。 ... [详细]
author-avatar
大帅哥石头2011
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有