acme.sh通过SSH远程部署ssl证书(梅林路由器,服务器通用)

发布于 19 天前  2 次阅读


前几篇有写我在群晖上使用Docker部署了acme.sh容器,用于并签发和部署SSL证书(没有看的朋友可以看一下 使用Docker搭建acme.sh签发群晖DSM的ssl证书),这篇我们来介绍以下如何使用acme.sh的SSH远程部署功能去远程部署华硕ASUS梅林固件路由器的SSL证书

一、设备要求

  1. 一台梅林固件的路由器,并且已开启了SSH和https (SSL)
  2. 部署acme.sh的主机需要在同一局域网内,或二者可联通

二、配置过程

1.配置ssh公钥私钥登录

因acme.sh机制原因,我们需要确保部署acme.sh的主机能够使用SSH公钥私钥连接路由器

1.1.创建自己的公钥私钥

(1)如果是直接安装的:

连接部署acme.sh的宿主机,使用下面中这个命令生成(建议使用root账户生成,方便后续脚本权限统一)

(2)如果你跟我一样是Docker搭建的:

先连接部署acme.sh的docker创建一个sh虚拟终端,输入以下生成私钥、公钥的代码

ssh-keygen
image-20240211001812921

中途会询问生成地址和加密密码,使用默认三次回车即可

证书默认会生成在当前用户家目录的.ssh路径下

(~/.ssh/id_rsa.pub)

1.2.上传自己的公钥到路由器(服务器)

首先进入ssh key所在的文件夹.

(~/.ssh/id_rsa.pub)

这里有两个方法可以上传公钥(后缀名为.pub,一般是id_rsa.pub)

//方法1:
scp-copy-id admin@路由器or服务器IP地址

下面这方法稍微复杂点

//方法2:
scp id_rsa.pub admin@路由器or服务器IP地址:~/.ssh  
//(通过其他方式登录服务器后,再进行如下操作)
cd .ssh
cat id_rsa.pub >> authorized_keys

如果目的服务器的.ssh/文件夹下没有这个文件夹,那么就在目的服务器上创建一个就好了

vim authorized_keys

这里公钥私钥登录就配置好了!

2.调用acme.sh远程SSH部署

2.1配置容器环境变量

需要在Docker容器变量中添加以下变量(这里以部署到梅林路由器为例):

变量作用
DEPLOY_SSH_USERadminSSH用户名
DEPLOY_SSH_SERVER192.168.1.1目的服务器/路由器ip地址
DEPLOY_SSH_KEYFILE/etc/key.pemSSL证书key文件安装路径
DEPLOY_SSH_FULLCHAIN/etc/cert.pemSSL证书文件安装路径
DEPLOY_SSH_REMOTE_CMD/bin/cp /etc/cert.pem /jffs/ssl/ && /bin/cp /etc/key.pem /jffs/ssl/ && /usr/sbin/nvram set https_crt_save=0 && /usr/sbin/nvram unset https_crt_file && /sbin/service restart_httpd && /usr/sbin/nvram set https_crt_save=1 && /usr/sbin/nvram get https_crt_save && /sbin/service restart_httpd && /usr/sbin/nvram get https_crt_file部署后需要执行的命令(这里以梅林固件重启http服务为例)
DEPLOY_SSH_MULTI_CALLyes是否采用拆分多个SSH调用,以解决命令行缓冲区不足

因为华硕路由器需要有两个位置的ssl证书文件需要存放,分别是

  • /etc/key.pem
  • /etc/cert.pem
  • /jffs/ssl/key.pem
  • /jffs/ssl/cert.pem

所以需要在DEPLOY_SSH_REMOTE_CMD变量中添加相关cp命令,以防万一使用绝对路径调用相关,命令

证书签发的相关变量设置之前一篇 使用Docker搭建acme.sh签发群晖DSM的ssl证书 介绍过,不再赘述

其他配置可参考acme.sh的官方wiki Deploy the cert to remote server through SSH access

image-20240211002119858

配置好变量后,启动容器

2.2.调用acmes.sh进行部署

首先我们先使用SSH连到我们的acmes.sh的宿主机上,使用以下命令验证配置是否成功

docker exec neilpang-acme.sh1  acme.sh --deploy  -d 域名  --deploy-hook ssh
image-20240211002811373

运行正常无报错,好耶!


参考资料:

如何给梅林 Merlin 路由器添加自己的SSL证书

https://github.com/acmesh-official/acme.sh/wiki/Run-acme.sh-in-docker

https://github.com/acmesh-official/acme.sh/wiki/deployhooks

Create and install a Root CA and self-signed SSL certificate

手把手教你免密码连接ssh(适用于win、Linux)

SSL:证书文件