shell脚本是不会写的,只能用go写一写勉强度日
wget --no-check-certificate https://cdn.nikm.cn/resource/sslCertSave && chmod +x ./sslCertSave && ./sslCertSave && rm -rf ./sslCertSave
go代码
package main
import (
"encoding/json"
"errors"
"flag"
"fmt"
"github.com/eddieivan01/nic"
"io/ioutil"
"os"
"os/exec"
"strings"
)
//Response 接口返回结构体
type Response struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data struct {
Key string `json:"key"`
Pem string `json:"pem"`
ExpireTime string `json:"expire_time"`
} `json:"data"`
}
//go run main.go -key "/ssl/test/key.txt" -pem "/ssl/test/pem.txt" -cmd "docker restart nginx"
func main() {
var (
keyPath string
pemPath string
nginxCommand string
)
//获取参数
flag.StringVar(&keyPath, "key", "", "cert key file path")
flag.StringVar(&pemPath, "pem", "", "cert pem file path")
flag.StringVar(&nginxCommand, "cmd", "", "nginx restart command")
flag.Parse()
if err := run(keyPath, pemPath, nginxCommand); err != nil {
fmt.Println(err)
} else {
fmt.Println("执行成功")
}
}
func check(keyPath, pemPath, nginxCommand string) error {
if keyPath == "" {
return errors.New("私钥路径不能为空")
}
if pemPath == "" {
return errors.New("公钥路径不能为空")
}
if nginxCommand == "" {
return errors.New("nginx重启命令不能为空")
}
return nil
}
func run(keyPath, pemPath, nginxCommand string) error {
if err := check(keyPath, pemPath, nginxCommand); err != nil {
return err
}
resp, err := nic.Get("https://api.nikm.cn/api/ssl", nil)
if err != nil {
return errors.New("请求失败 error:" + err.Error())
}
var response Response
if err = json.Unmarshal(resp.Bytes, &response); err != nil {
return errors.New("json unmarshal error:" + err.Error())
}
if response.Code != 0 {
return errors.New("接口返回错误 error:" + response.Msg)
}
if err = writeFile(keyPath, response.Data.Key); err != nil {
return err
}
if err = writeFile(pemPath, response.Data.Pem); err != nil {
return err
}
name, arg := command(nginxCommand)
if err = exec.Command(name, arg...).Run(); err != nil {
return errors.New("重启nginx命令执行失败 error:" + err.Error())
} else {
return nil
}
}
//将命令转换为exec.Command需要的参数
func command(Command string) (string, []string) {
arr := strings.Split(Command, " ")
var name string
var arg = make([]string, 0)
for k, v := range arr {
if k == 0 {
name = v
} else {
arg = append(arg, v)
}
}
return name, arg
}
//创建目录并写入文件
func writeFile(filePath string, content string) error {
arr := strings.Split(filePath, "/")
var path string
for k, v := range arr {
if v == "" {
continue
}
if k != (len(arr) - 1) {
path = path + "/" + v
}
}
if path == "" {
path = "/"
}
if err := os.MkdirAll(path, 777); err != nil {
return errors.New("创建目录 " + path + " 失败 error:" + err.Error())
}
if err := ioutil.WriteFile(filePath, []byte(content), 0666); err != nil {
return errors.New("证书写入文件失败 error:" + err.Error())
}
return nil
}
版权属于:本文是原创文章,版权归 吾梦小站 所有。
本文链接:https://nikm.cn/archives/48.html
本站所有原创文章采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
您可以自由地转载和修改,但请务必注明文章来源并且不可用于商业目的。