1. #!/bin/bash
    #By Spinestars
    #20131118
  2. #name:ca_cert
    #certficate ca
  3. cd /etc/pki/CA/auto
  4. num=$RANDOM
  5. mv ./cert.csr ./cert$num.csr
  6. openssl ca -in ./cert$num.csr -out ./cert$num.crt
  7. cp ./cert$num.crt /tmp/cert.crt
  1. #!/bin/bash
    #By Spinestars
    #20131118
  2. #name:create_ca
    cd /etc/pki/CA
  3. umask
  4. openssl genrsa -out private/cakey.pem
  5. openssl req -new -x509 -key private/cakey.pem -out cacert.pem
  6. [ -f index.txt ] || touch index.txt
  7. [ -f serial ] || echo '' > serial

主体脚本:

  1. #!/bin/bash
  2. #By Spinestars
  3. #20131118
    #name:autocert
  4. #create ssh_key,ssh免验证
  5. createsshkey(){
  6. #client --> ca_server
  7. #本地创建私钥
  8. ssh-keygen -t rsa -P ''
  9. #传递到ca
  10. ssh-copy-id -i ~/.ssh/id_rsa.pub root@$
  11.  
  12. #ca_server --> client
  13. #远程连接到ca,并判定id_rsa是否存在,若不存在则ssh-keygen生成私钥,这里-p后面直接跟空密码可能不行,删除-p参数可以
  14. ssh root@$ "[ -e /root/.ssh/id_rsa ] || ssh-keygen -t rsa -P ''"
  15. #远程拉取ca的id_rsa.pub到本地~/.ssh/下,并改名为authorized_keys,同时更改权限
  16. scp root@$:/root/.ssh/id_rsa.pub ~/.ssh/authorized_keys && chmod ~/.ssh/authorized_keys
  17. }
  18.  
  19. ca_dir="/etc/pki/CA/"
  20. #create ca_server ca服务器创建
  21. createca(){
  22. echo '创建CA服务器(create ca_server)...................'
  23. #ssh执行ca服务器上的创建ca服务器的脚本
  24. ssh root@$ "bash $2auto/create_ca"
  25. echo -e "ca server [\e[1;32m OK \e[0m]"
  26. }
  27.  
  28. #certficate ca 证书签署
  29. certficate_ca(){
  30. echo '证书签署...............'
  31. #ssh执行ca服务器上的证书签署脚本ca_cert
  32. ssh root@$ "bash $2auto/ca_cert"
  33. #将生成的客户端证书复制到本地
  34. scp root@$:/tmp/cert.crt ./
  35. }
  36.  
  37. #create client_cert 证书申请
  38. createclicrt(){
  39. read -p '本地证书申请(create client crt)!go on <any press> or exit <ctrl + c>!'
  40. umask
  41. openssl genrsa -out ./cert.key
  42. openssl req -new -key ./cert.key -out ./cert.csr
  43. #将本地生成的csr申请传送到ca服务器的/etc/pki/CA/auto目录内
  44. scp ./cert.csr root@$:$2auto
  45. #调用证书签署函数
  46. certficate_ca $ $
  47. [ -e cert*.crt ] &&
  48. echo -e "申请成功(client crt) [\e[1;32m OK \e[0m]" ||
  49. echo -e "申请失败(client crt) [\e[1;31m Failure \e[0m]"
  50. }
  51. #ca服务器ip地址
  52. echo 'Please su - to root!'
  53. read -p '输入CA服务器地址(Please input ca_server_ip):' ca_ip
  54. #ssh免验证脚本
  55. [ -e ~/.ssh/id_rsa ] || createsshkey $ca_ip
  56. #创建ca服务器临时目录,并传递脚本
  57. ssh root@$ca_ip "[ -e ${ca_dir}auto ] || mkdir ${ca_dir}auto"
  58. scp -r ./* root@$ca_ip:${ca_dir}auto
  59. #创建ca
  60. read -p '是否创建CA服务器(create ca_server)?[yes/no]' yn
  61. [ $yn == 'yes' ] && createca $ca_ip $ca_dir
  62. #证书申请
  63. createclicrt $ca_ip $ca_dir

目的:自动创建证书.

使用方法:

web端:将三个脚本复制到同一个目录内,并改名为脚本中name后所标示的名字,并赋予执行权限.之后执行主体脚本

期间创建ca的时候,需要指定ca的ip

获取的证书,最后存放在脚本所在目录内.

shell脚本练习(autocert)的更多相关文章

  1. 第一个shell脚本

    打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好. #!/bin/bash echo "Hello World !" &quo ...

  2. 使用C#给Linux写Shell脚本

    在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了.今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之 ...

  3. shell脚本规划化模板

    shell脚本规划化模板 Linux运维过程中,shell脚本是不可缺少的工具,但是每个运维人员编程的习惯都不一样,很多时候就是实现某个功能,写出来的脚本都是烂七八糟的.脚本必须规范化,应该从以后几个 ...

  4. Shell脚本编程30分钟入门

    Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...

  5. Linux Shell脚本逻辑操作符简介

    在写程序时,会用到条件判断,测试条件是否成立.很多时候,判断条件是多个的,这个时候需要用到逻辑操作符.shell脚本中常用的有哪些逻辑操作符呢? 1.逻辑与: -a 格式: conditon1 -a ...

  6. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  7. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  8. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  9. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

随机推荐

  1. Angry Professor

    def main(): t = int(raw_input()) for _ in range(t): n, k = map(int, raw_input().strip().split(' ')) ...

  2. IC封装图片认识(一):BGA

    在上篇文章<常用IC封装技术介绍>第一个提到的IC封装形式就是BGA,全称是Ball Grid Array(球栅阵列结构的PCB),它是集成电路采用有机载板的一种封装法.其具有以下五个特点 ...

  3. SSL和SSH和OpenSSH,OpenSSL有什么区别

    ssl是通讯链路的附加层.可以包含很多协议.https, ftps, ..... ssh只是加密的shell,最初是用来替代telnet的.通过port forward,也可以让其他协议通过ssh的隧 ...

  4. Android CursorAdapter

    CursorAdapter 继承于BaseAdapter是个虚类,它为cursor和ListView提供了连接的桥梁.            public abstract class     Cur ...

  5. OpenWRT 编译 error GNU libiconv not in use but included iconv.h is from...

    OpenWRT 编译 error GNU libiconv not in use but included iconv.h is from... 编译的时候碰到一个常见的错误,但是却在一个陌生的地方爆 ...

  6. 系统监控的工具tsar

    近期一直在折腾着elasticsearch,需要对硬件进行评估 大概几方面 内存 cpu 硬盘 网络. iostat vmstat top 几个命令用了一堆,其实需要关注的几个点只要都列出来就可以了 ...

  7. 【转】ARM Linux 3.x的设备树(Device Tree)

    原文网址:http://blog.csdn.net/21cnbao/article/details/8457546 1.    ARM Device Tree起源 Linus Torvalds在201 ...

  8. Linux 通过HTTP进行域名更新

    一.3322动态域名更新接口 接口地址 API URL http://members.3322.net/dyndns/update HTTP请求 GET /dyndns/update?hostname ...

  9. poj 3616 Milking Time(dp)

    Description Bessie ≤ N ≤ ,,) hours (conveniently labeled ..N-) so that she produces as much milk as ...

  10. linux下部署svn服务器

    系统Linux debian 2.6.32-5-686 先安装svn工具:apt-get install subversion,耐心等待安装完成.安装完成后svn客户端.服务器都有了. 接者建立svn ...