salt-api使用
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使用的更多相关文章
- CentOS 安装及配置Salt api
安装 # yum -y install salt-api 更改配置 vim /etc/salt/master 把默认的注释掉 我们这边默认配置文件目录是/srv/salt default_inclu ...
- 死磕salt系列-salt API 使用
启用salt-api 服务 这里简单的说明下,SaltStack官方支持三种REST API,分别是rest_cherry; rest_tonado和rest_wsgi, 本文选择使用rest_che ...
- Salt 与Salt API配置
1.安装 [root@localhost yum.repos.d]# cat /etc/yum.repos.d/salt.repo [saltstack-repo] name=SaltStack re ...
- salt api
#!/usr/bin/env python # -*- coding:utf8 -*- # __author__ = '北方姆Q' import requests import json from d ...
- 从零开始搭建Salt Web之初探salt-api
Salt-API入门 在Google搜索栏输入salt-api,会有一些讲述如何使用Salt-API的文章,确实有效,不过都是建立 在将Salt安装在默认目录下的情况下,即通过apt-get inst ...
- 死磕salt系列-salt文章目录汇总
死磕salt系列-salt入门 死磕salt系列-salt配置文件 死磕salt系列-salt grains pillar 配置 死磕salt系列-salt 常用modules 死磕salt系列-sa ...
- 死磕salt系列-salt入门
saltstack简介 SaltStack是一种新型的基础设施管理软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流,以毫秒为单位.SaltStack提供了一个动态基础 ...
- 运维自动化之salt笔记
1:saltstack的基本介绍 2:salt的安装 1:服务端1:安装2:配置文件3:运行4:注意事项2:客户端1:安装2:配置文件3:运行4:注意事项 3:salt的使用: 1:基础知识1:tar ...
- 搭建基于Jenkins salt-api的运维工具
1. 安装salt-master和salt-minion 安装过程不再赘述,请参考http://docs.saltstack.com/en/latest/topics/installation/ind ...
- 使用python实现后台系统的JWT认证(转)
今天的文章介绍一种适用于restful+json的API认证方法,这个方法是基于jwt,并且加入了一些从oauth2.0借鉴的改良. 1. 常见的几种实现认证的方法 首先要明白,认证和鉴权是不同的.认 ...
随机推荐
- go语言笔记(一)
packge main import "fmt" func main(){ fmt.println("hello") } 大括号约定 方法名首字母区分方法类型, ...
- SAP查找用户的登录记录
1.可以使用USR02中有个上次登陆日期和登陆时间. 2.用SE38跑下RSUSR200,输入用户名即可查询上次登陆日期 3.SU10可以查到
- [arc072F]Dam-[单调队列]
Description 传送门 Solution 首先我们肯定不能那么耿直地直接把水混合起来吧..不然分分钟完球. 那么怎么找到最优解呢?假如我们把水的体积和温度按顺序插入队列,这时我们插入第i天的水 ...
- c++ 双向链表 的查找和删除
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> ...
- 【TJOI2015】线性代数
题面 题解 要求的是 \[ \sum_{i=1}^n\sum_{j=1}^na_ia_jb_{i,j} - \sum_{i=1}^na_ic_i \] 可以看出这是一个最大权闭合子图问题 代码 #in ...
- opencv-Getting Started with Images
1.opencv库简单的操作图片 # coding = utf-8 # 书籍:<<学习opencv>> import cv2 from matplotlib import py ...
- JS 四舍五入有小数点
后台传值 先整数化 var a = parseInt(10); var b = parseInt(3); var c = (a / b).toFixed(3)*100; 除之后进行小数点截取后三位再* ...
- Qt-网易云音乐界面实现-1 窗口隐藏拖拽移动,自定义标题栏
最近也换了公司,也换了新的工作,工资也象征性的涨了一点点,但是最近心里还是慌慌,不知道为什么,没有那种踏实感,感觉自己随时可以被抛弃的感觉.感觉自己在荒废时间,也感觉自己在浪费生命. 为了让自己在被抛 ...
- C# 通过copydata实现进程间通信
最近公司需要实现一个基于copydata进程间通信的功能.原来一直没有接触过Windows的进程通信,这次正好可以学习一下. 程序是基于Winform的,下面直接上代码. 公共类: public cl ...
- Unity新版本VR以及SteamVR基础
一.Unity2018新版本VR Unity 简单VRDemo搭建 Unity环境搭建: PlayerSetting设置如下: 启动虚拟现实驱动,sdk选择OpenVR.HTC Vive只支持Ope ...