两台Linux之间自动同步文件


背景

需求,服务器Linux A 更新SSL证书(Certbot renew)后,需要把证书自动同步到服务器Linux B 

一、Linux B创建用户

创建用户

为Copy证书创建一个单独用户。利于权限控制

Markup 全选
# 添加用户 scpssl
useradd scpssl
# 设置用户scpssl密码
passwd scpssl

# 设置目录权限
setfacl -m u:scpssl:rwx /etc/nginx/ssl

# 设置子目录权限
setfacl -m d:u:scpssl:rwx /etc/nginx/ssl

允许执行sudo nginx -s reload

用 visudo 编辑(必须这样)

Markup 全选
visudo

不要用 vim 直接改 /etc/sudoers(容易写坏系统)

在文件最后加一行

Markup 全选
# 允许scpssl以root身份执行 nginx -s reload
scpssl ALL=(root) NOPASSWD: /usr/sbin/nginx -s reload
# 允许scpssl以root身份执行rsync
scpssl ALL=(root) NOPASSWD: /usr/sbin/rsync

保存退出,切换到scpssl,验证scpssl 执行权限

Markup 全选
# 切换到scpssl用户
su - scpssl
# 执行 ngxin reload
sudo nginx -s reload

 

二、Linux A生成证书

因为我们要自动同步,所以需要服务器A利用SSH密钥来登录到服务器B。

服务器A中执行命令生成SSH证书,

Markup 全选
ssh-keygen -t rsa

两台Linux之间自动同步文件

三、Linux A中导入SSH证书到Linux B

copy证书到服务器B

Markup 全选
ssh-copy-id scpssl@10.8.0.3

测试登录

Markup 全选
# 因为证书名字不是默认id_rsa名称,因此这里需要指定证书名字
ssh -i /root/.ssh/id_rsa_scpssl scpssl@10.8.0.3

两台Linux之间自动同步文件

四、Linux A创建同步脚本

新建文件

Markup 全选
vim /usr/local/bin/sync-cert.sh

内容如下:

Markup 全选
#!/bin/bash

SRC="/etc/letsencrypt/live/"
DEST="scpssl@10.8.0.3:/etc/nginx/ssl/"

# rsync -avz --delete $SRC $DEST
rsync -avzL -e "ssh -i /root/.ssh/id_rsa_scpssl " $SRC $DEST --rsync-path="sudo rsync"

# 可选:重载目标服务器 nginx
# ssh -i /root/.ssh/id_rsa_scpssl scpssl@10.8.0.3 "sudo nginx -s reload"
if [ $? -eq 0 ]; then
    ssh -i /root/.ssh/id_rsa_scpssl scpssl@10.8.0.3 "sudo nginx -s reload"
fi

添加执行权限

Markup 全选
chmod +x /usr/local/bin/sync-cert.sh

测试执行:

Markup 全选
rsync -avz -e "ssh -i /root/.ssh/id_rsa_scpssl " /etc/letsencrypt/live/ scpssl@10.8.0.3:/etc/nginx/ssl/ --rsync-path="sudo rsync"
Markup 全选
# 测试rsync
rsync -avz -e "ssh -i /root/.ssh/id_rsa_scpssl " /etc/letsencrypt/live/ scpssl@10.8.0.3:/etc/nginx/ssl/ --rsync-path="sudo rsync"

# 测试整个脚本执行
/usr/local/bin/sync-cert.sh

两台Linux之间自动同步文件

五、绑定到certbot自动执行(重点)

certbot 有专门的 hook:--deploy-hook

执行

Markup 全选
certbot renew --deploy-hook "/usr/local/bin/sync-cert.sh"

 

或者写入配置(推荐)

Markup 全选
vim /etc/letsencrypt/renewal-hooks/deploy/sync-certs.sh

内容:

Markup 全选
#!/bin/bash
/usr/local/bin/sync-cert.sh

执行权限

Markup 全选
chmod +x /etc/letsencrypt/renewal-hooks/deploy/sync.sh

两台Linux之间自动同步文件

 

 

 

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
张国生
上一篇:Rocky Nginx添加端口
下一篇:没有了
评论列表

发表评论

评论内容
昵称:
关联文章

Web应用程序dll获取当前程序集路径问题

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码