salt-api 基本使用

目前salt API 支持的web模块如下:

  • CherryPy
  • Tornado
  • WSGI

1.安装salt-api

salt 使用 CherryPy来实现restful的api,提供外部调用

yum install -y salt-api

2.添加用户

salt-api 使用eauth 验证系统(使用api所在机器的账户进行验证),最好单独为salt-api添加账号:

#创建系统账户
useradd -M saltapi
passwd saltapi

3.配置salt-api

安全方便的考虑,官方建议使用https进行加密通信(如果使用http协议,忽略这部分。在配置文件上加上disable_ssl: True)。这时候需要生成自签名的证书(如果你用通用证书,可以直接使用)

3.1 生成自签名证书(用于ssl)

创建存放key的目录

mkdir -p  /opt/ssl/private

简单方法:

#此部分生成的key和cert证书不能使用-
<!--生成key-->
<!--openssl genrsa -out /opt/ssl/private/key.pem 4096 -->
<!--生成证书-->
<!--openssl req -new -x509 -key /opt/ssl/private/key.pem -out /opt/ssl/private/cert.pem -days 1826-->
<!--查看路径下生成的证书:-->
<!--[root@master private]# ll /opt/ssl/private-->
<!--total 8-->
<!---rw-r--r-- 1 root root 1911 Jun 22 20:56 cert.pem-->
<!---rw-r--r-- 1 root root 3243 Jun 22 20:55 key.pem-->

推荐方法:

#1. 通过ssl生成私钥,不要担心密码问题,现在先输入一个-稍后会取消这个密码
[root@master private]# openssl genrsa -des3 -out server.key 2048
Generating RSA private key, 2048 bit long modulus
.......................................................+++
.....................+++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
#2. 创建一个证书签名请求(CSR)它会询问CA签发证书时关注的几个重要问题,在内部网络中,这些的重要性就低了**
[root@master private]# openssl req -new -key server.key -out server.csr
Enter pass phrase for server.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) []:BeiJing
Locality Name (eg, city) [Default City]:BeiJing
Organization Name (eg, company) [Default Company Ltd]:TEST
Organizational Unit Name (eg, section) []:test
Common Name (eg, your name or your server's hostname) []:test@example.com
Email Address []:test@qq.com Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
#3. 接下来,我们来取消之前私钥中使用的密码。
[root@master private]# cp server.key server.key.org
[root@master private]# openssl rsa -in server.key.org -out server.key
Enter pass phrase for server.key.org:
writing RSA key
#4. 最后,我们创建自签名的证书
[root@master private]# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=CN/ST=BeiJing/L=BeiJing/O=TEST/OU=test/CN=test@example.com/emailAddress=test@qq.com
Getting Private key
#5. 至此,我们有如下4个文件:
[root@master private]# tree
.
├── server.crt
├── server.csr
├── server.key
└── server.key.org
#6. 接下来将server.crt文件复制到ssl_crt选项指定的路径,server.key 文件复制到ssl_key选项指定的路径

3.2 配置文件

建议为salt-api单独创建配置文件,/etc/salt/master默认会导入master.d/*.conf

touch /etc/salt/master.d/salt-api.conf 添加内容:

#关于用户认证部分
external_auth:
pam:
#指定用户
saltapi:
#指定用户能使用哪些salt模块 例: - test.*
#用户能够访问的runner模块
#用户能够访问的wheel模块
- .*
- '@runnner'
- '@wheel' rest_cherrypy:
port: 9000
ssl_crt: /opt/ssl/private/cert.pem
ssl_key: /opt/ssl/private/key.pem #进行重启salt-master服务器
service salt-master restart

3.3调试

测试用户是否登录成功

salt -a pam \*  test.ping

查看saltapi用户的错误登录次数

pam_tally2 -u saltapi

清空saltapi用户的错误登录次数

pam_tally2  -r -u saltapi

4 Salt-API初体验

因为我们是第一次使用salt-api ,为了更好的了解它,我们把debug设置为True,

在master端启动Salt-API

#命令salt-api启动
[root@master ~]# salt-api
[23/Jun/2017:15:18:38] ENGINE Listening for SIGHUP.
[23/Jun/2017:15:18:38] ENGINE Listening for SIGTERM.
[23/Jun/2017:15:18:38] ENGINE Listening for SIGUSR1.
[23/Jun/2017:15:18:38] ENGINE Bus STARTING
CherryPy Checker:
'log_file' is obsolete. Use 'log.error_file' instead.
section: [saltopts] [23/Jun/2017:15:18:38] ENGINE Started monitor thread '_TimeoutMonitor'.
[23/Jun/2017:15:18:38] ENGINE Started monitor thread 'Autoreloader'.
[23/Jun/2017:15:18:38] ENGINE Serving on 0.0.0.0:9000
[23/Jun/2017:15:18:38] ENGINE Bus STARTED

文章找个推荐写法:

curl -si https://127.0.0.1:9000/login -H 'Accept: application/json' -d username='saltapi' -d password='123456' -d eauth='pam'

但是在使用中发现会提示

SSL routines:SSL3_READ_BYTES:sslv3 alert certificate unknown
#SSL例程:SSL3_READ_BYTES:sslv3警告证书未知

自己百度解决:

curl --sslv3 -k -si https://127.0.0.1:9000/login -H 'Accept: application/json' -d username='saltapi' -d password='123456' -d eauth='pam'

参数解释:

--sslv3 指定sslv3版本
-k 忽略证书获取https内容
-s 指定使用静默(silent)方式
-i 指定SaltAPI收到服务器返回的结果同时显示HTTP Header。
-H 指定一个特定的Header给远端服务器,当SaltAPI 需要发送appliton-tion/json Header时。会以我们希望的JSON格式返回结果
-d 想远端服务器发送POST请求,以key=value的格式发送 ,注意key=v时,必须紧挨=号两边

获取到的返回结果:

HTTP/1.1 200 OK
Content-Length: 200
Access-Control-Expose-Headers: GET, POST
Vary: Accept-Encoding
Server: CherryPy/3.2.2
Allow: GET, HEAD, POST
Access-Control-Allow-Credentials: true
Date: Fri, 23 Jun 2017 07:27:47 GMT
Access-Control-Allow-Origin: *
X-Auth-Token: 8267c29f55a2b3b95a35de32ec30de353937c19c
Content-Type: application/json
Set-Cookie: session_id=8267c29f55a2b3b95a35de32ec30de353937c19c; expires=Fri, 23 Jun 2017 17:27:47 GMT; Path=/ {"return": [{"perms": [".*", "@runnner", "@wheel"], "start": 1498202867.8593781, "token": "8267c29f55a2b3b95a35de32ec30de353937c19c", "expire": 1498246067.8593791, "user": "saltapi", "eauth": "pam"}]}

在这个结果中,我们获取到了token,在之后的请求中我们会使用到他。

"token": "8267c29f55a2b3b95a35de32ec30de353937c19c"

我们在获取到token后使用下面的命令来进行操作

curl -k -s https://127.0.0.1:9000/minions -H 'Accept: application/json' -H 'X-Auth-Token: 48590e5819f5bdd1abffed950647c7386f5bd2c5' -d client='local' -d tgt='*' -d fun='test.ping'

要格外注意两点

1. -k 忽略https证书
2. -d 后面的参数 = 号两边不能有空格

获取到的返回结果:

{"_links": {"jobs": [{"href": "/jobs/20170623155752802281"}]}, "return": [{"jid": "20170623155752802281", "minions": ["master"]}]}

为了获取返回的结果,我们需要运行另外一个包含任务ID的命令 ,该命令需要使用GET方法,

curl -k -s https://127.0.0.1:9000/jobs/20170623155752802281 -H 'Accept: application/json' -H 'X-Auth-Token: 48590e5819f5bdd1abffed950647c7386f5bd2c5'

关于salt-api部分python 调用 pycurl https

此部分联系管理员开通

salt-api使用的更多相关文章

  1. CentOS 安装及配置Salt api

    安装 # yum -y install salt-api 更改配置 vim /etc/salt/master 把默认的注释掉  我们这边默认配置文件目录是/srv/salt default_inclu ...

  2. 死磕salt系列-salt API 使用

    启用salt-api 服务 这里简单的说明下,SaltStack官方支持三种REST API,分别是rest_cherry; rest_tonado和rest_wsgi, 本文选择使用rest_che ...

  3. Salt 与Salt API配置

    1.安装 [root@localhost yum.repos.d]# cat /etc/yum.repos.d/salt.repo [saltstack-repo] name=SaltStack re ...

  4. salt api

    #!/usr/bin/env python # -*- coding:utf8 -*- # __author__ = '北方姆Q' import requests import json from d ...

  5. 从零开始搭建Salt Web之初探salt-api

    Salt-API入门 在Google搜索栏输入salt-api,会有一些讲述如何使用Salt-API的文章,确实有效,不过都是建立 在将Salt安装在默认目录下的情况下,即通过apt-get inst ...

  6. 死磕salt系列-salt文章目录汇总

    死磕salt系列-salt入门 死磕salt系列-salt配置文件 死磕salt系列-salt grains pillar 配置 死磕salt系列-salt 常用modules 死磕salt系列-sa ...

  7. 死磕salt系列-salt入门

    saltstack简介 SaltStack是一种新型的基础设施管理软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流,以毫秒为单位.SaltStack提供了一个动态基础 ...

  8. 运维自动化之salt笔记

    1:saltstack的基本介绍 2:salt的安装 1:服务端1:安装2:配置文件3:运行4:注意事项2:客户端1:安装2:配置文件3:运行4:注意事项 3:salt的使用: 1:基础知识1:tar ...

  9. 搭建基于Jenkins salt-api的运维工具

    1. 安装salt-master和salt-minion 安装过程不再赘述,请参考http://docs.saltstack.com/en/latest/topics/installation/ind ...

  10. 使用python实现后台系统的JWT认证(转)

    今天的文章介绍一种适用于restful+json的API认证方法,这个方法是基于jwt,并且加入了一些从oauth2.0借鉴的改良. 1. 常见的几种实现认证的方法 首先要明白,认证和鉴权是不同的.认 ...

随机推荐

  1. Velocity的学习1

    Velocity 是一个基于Java的的模板引擎,通过特定的语法,速度可以获取在的Java语言中定义的对象,从而实现界面和Java的代码的真正分离,这意味着可以使用Velocity替代JSP的开发模式 ...

  2. window下查杀占用端口的进程

    一. 查找占用的端口进程号,比如8080 C:> netstat –ano|findstr 8080 C:\Users\chry>netstat -ano | findstr 8080 T ...

  3. cogs1772 [国家集训队2010]小Z的袜子

    沉迷于文化的我N年没更blog了...(\(N \in (0,1)\)) 然后回到机房就沉迷于 \(generals.io\) 无法自拔...QAQ 然后想打一遍splay(然后是LCT),然后放弃了 ...

  4. SQL Server Management Studio 评估期已过

    SQL2008破解: (1)将SQL安装光盘(或者ISO)放进去运行,进入安装界面. (2)选择“维护”中的“版本升级”,如图: (3)按照版本升级的向导,先输入产品密钥,也就是正式企业版的序列号: ...

  5. css绘制常见的几何图形

    前言:终于我的大一生活结束了,迎来了愉快的暑假,大家都开始了各自的忙碌.一直忙着一些项目的事情,终于决定今天要更新一篇博客了,对上一阶段的学习做简单的总结. 这次我主要总结一下用Css绘制各种形状的技 ...

  6. 一个导致MGR数据混乱Bug的分析和修复

    1.背景 MGR是个好东西,因为他从本质上解决了数据不一致的问题.不光是解决了问题,而且出自名门正派(Oracle的MySQL团队),对品质和后续的维护,我们是可以期待的. 但是在调研的过程中,发现有 ...

  7. 自定义 vue switch 组件

    <template> <div class="switch clearfix" @click="toggle" v-bind:style=&q ...

  8. Babylon.js官方性能优化文档中文翻译

    在这里列出Babylon.js官方性能优化文档的中英文对照,并在CardSimulate项目里对其中的一些优化方法进行实践. How To 如何 Optimize your scene 优化你的场景 ...

  9. 信息提示 - bootStrap4常用CSS笔记

    .alert 基类 .alert-{success.info.warning.danger.primary.secondary.light.dark} 各种类型的配色样式 .fade..show 设置 ...

  10. Netty源码分析第1章(Netty启动流程)---->第2节: NioServerSocketChannel的创建

    Netty源码分析第一章:  Server启动流程 第二节:NioServerSocketChannel的创建 我们如果熟悉Nio, 则对channel的概念则不会陌生, channel在相当于一个通 ...