salt-api使用

salt-api 基本使用

目前salt API 支持的web模塊以下:python

  • CherryPy
  • Tornado
  • WSGI

1.安裝salt-api

salt 使用 CherryPy來實現restful的api,提供外部調用web

yum install -y salt-api

2.添加用戶

salt-api 使用eauth 驗證系統(使用api所在機器的帳戶進行驗證),最好單獨爲salt-api添加帳號:json

#建立系統帳戶
useradd -M saltapi
passwd saltapi

3.配置salt-api

安全方便的考慮,官方建議使用https進行加密通訊(若是使用http協議,忽略這部分。在配置文件上加上disable_ssl: True)。這時候須要生成自簽名的證書(若是你用通用證書,能夠直接使用)api

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用戶的錯誤登陸次數restful

pam_tally2 -u saltapi

清空saltapi用戶的錯誤登陸次數網絡

pam_tally2  -r -u saltapi

4 Salt-API初體驗

由於咱們是第一次使用salt-api ,爲了更好的瞭解它,咱們把debug設置爲True,session

在master端啓動Salt-APIapp

#命令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

此部分聯繫管理員開通

相關文章
相關標籤/搜索