pyjojo,把bash脚本变成API - wbwangk/wbwangk.github.io GitHub Wiki

项目地址:https://github.com/atarola/pyjojo

准备工作

使用ubunt14TLS做的验证,它已经默认装了python2.7.6和ython3.4.0。 安装pip,是python应用的部署工具:

apt-get install python-pip

如果是centos,则先安装yum install epel-release再执行yum install python-pip 然后用pip装pyjojo:

pip install pyjojo

安装后测试一下:

pyjojo --help

会显示很多命令行说明,表明安装成功。 运行pyjojo:

pyjojo -d --dir /srv/pyjojo

pyjojo默认监听3000端口,可以用浏览器访问localhost:3000测试一下。 我要用apache htpasswd工具来生成密码文件,要先安装它。执行:

apt-get install apache2-utils

安装成功后执行一个命令测试一下:htpasswd --help 再生成一个密码测试一下:htpasswd -nb wbwang 123。系统会显示wbwang:$apr1$GfIUY8Yf$OuMYbvtJ.gDasIn3wvGvn1 这就是生成的密码文件。这个文件可以直接被apache httpd或nginx解析,实现http基础认证。用户名wbwang,密码是123。

正式验证pyjojo

cd /srv/pyjojo
vi htpasswd.sh

输入以下内容:

#!/bin/bash

# -- jojo --
# description: httpasswd密码文件生成
# param: user - 用户id
# param: pwd - 密码
# filtered_param: pwd - 不要把密码输出到日志
# -- jojo --

echo "jojo_return_value user=$USER"
pwdfile=$(htpasswd -nb $USER $PWD); echo "jojo_return_value htpasswd=$pwdfile"
exit 0

第一行是是说明这是一个bash脚本,需要/bin目录下bash应用去解释这个脚本文件。被-- jojo ---包裹的区域是元数据定义区。根据定义的元数据,这个服务接受两个参数,用户id和密码。

刚编辑生成的htpasswd.sh脚本是不可执行的,需要用linux命令赋予它执行的权限:

chmod +x htpasswd.sh

测试一下这个脚本文件。注意这个脚本的文件名htpasswd.sh将自动变成URL的一部分。

curl -XPOST http://localhost:3000/scripts/htpasswd -H "Content-Type: application/json" -d '{"user": "wbwang", "pwd": "123"}'

响应如下:

{"retcode": 0, "return_values": 
    {"htpasswd": "wbwang:$apr1$Q3sWEa2V$6de019fnluH.v9N0kV50M0", "user": "wbwang"}, 
    "stderr": [], 
    "stdout": ["jojo_return_value user=wbwang", "jojo_return_value htpasswd=wbwang:$apr1$Q3sWEa2V$6de019fnluH.v9N0kV50M0"]}

注意,即使用户名口令不变,每次调用htpasswd生成的密码文件也会不同。因为有个随机数当加密盐,但并不影响密码的解析。

至此,htpasswd工具就被包装成了一个API,API地址是:localhost:3000/scripts/htpasswd。这个API的输入输出都是json字符串。