前几篇有写我在群晖上使用Docker部署了acme.sh容器,用于并签发和部署SSL证书(没有看的朋友可以看一下 使用Docker搭建acme.sh签发群晖DSM的ssl证书),这篇我们来介绍以下如何使用acme.sh的SSH远程部署功能去远程部署华硕ASUS梅林固件路由器的SSL证书
一、设备要求
- 一台梅林固件的路由器,并且已开启了SSH和https (SSL)
- 部署acme.sh的主机需要在同一局域网内,或二者可联通
二、配置过程
1.配置ssh公钥私钥登录
因acme.sh机制原因,我们需要确保部署acme.sh的主机能够使用SSH公钥私钥连接路由器
1.1.创建自己的公钥私钥
(1)如果是直接安装的:
连接部署acme.sh的宿主机,使用下面中这个命令生成(建议使用root账户生成,方便后续脚本权限统一)
(2)如果你跟我一样是Docker搭建的:
先连接部署acme.sh的docker创建一个sh虚拟终端,输入以下生成私钥、公钥的代码
ssh-keygen
中途会询问生成地址和加密密码,使用默认三次回车即可
证书默认会生成在当前用户家目录的.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_USER | admin | SSH用户名 |
DEPLOY_SSH_SERVER | 192.168.1.1 | 目的服务器/路由器ip地址 |
DEPLOY_SSH_KEYFILE | /etc/key.pem | SSL证书key文件安装路径 |
DEPLOY_SSH_FULLCHAIN | /etc/cert.pem | SSL证书文件安装路径 |
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_CALL | yes | 是否采用拆分多个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
配置好变量后,启动容器
2.2.调用acmes.sh进行部署
首先我们先使用SSH连到我们的acmes.sh的宿主机上,使用以下命令验证配置是否成功
docker exec neilpang-acme.sh1 acme.sh --deploy -d 域名 --deploy-hook ssh
运行正常无报错,好耶!
参考资料:
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
Comments NOTHING