无法使用doveadm实现邮件/服务器同步的自动化
无法使用doveadm实现邮件/服务器同步的自动化
我来帮你搞定这个自动化同步的问题!你遇到的每次需要输入目标服务器root密码的情况,本质是因为doveadm sync的remote:模式是通过SSH连接到目标服务器的,默认需要密码验证。只要配置好SSH免密登录,再配合简单的脚本批量处理用户列表,就能实现完全自动化。
第一步:配置SSH免密登录(让源服务器能无密码访问目标服务器的root账号)
在你的源服务器(正在运行的邮件服务器)上生成SSH密钥对(如果还没有的话):
ssh-keygen -t ed25519执行命令后一路按回车就行,不要设置密钥保护密码(不然自动化的时候还是要输密码)。
将生成的公钥复制到目标服务器(mail2.myserver.com)的root用户的授权列表中:
ssh-copy-id root@mail2.myserver.com这时候会让你手动输入一次目标服务器的root密码,输入完成后,后续SSH连接就不需要再输密码了。
如果
ssh-copy-id命令不好用,你也可以手动复制:- 查看源服务器上的公钥内容:
cat ~/.ssh/id_ed25519.pub - 在目标服务器上编辑
/root/.ssh/authorized_keys文件,把刚才的公钥内容粘贴进去 - 确保目标服务器上
.ssh目录权限是700,authorized_keys文件权限是600:chmod 700 /root/.ssh chmod 600 /root/.ssh/authorized_keys
- 查看源服务器上的公钥内容:
测试免密登录:在源服务器上执行
ssh root@mail2.myserver.com,如果能直接登录到目标服务器,说明配置成功了。这时候再跑一次doveadm sync命令,就不会再弹出密码输入提示了。
第二步:写脚本批量处理用户列表
假设你已经把所有需要同步的邮箱地址存在了一个叫users.txt的文件里(每行一个邮箱),可以写一个简单的bash脚本循环处理每个用户:
#!/bin/bash # 替换成你的用户列表文件路径 USER_LIST="/path/to/your/users.txt" # 循环读取每个用户并执行同步 while IFS= read -r username; do echo "开始同步用户:$username" doveadm sync -1 -u "$username" remote:mail2.myserver.com echo "用户$username同步完成" done < "$USER_LIST"
把脚本保存为sync_emails.sh,然后给它加上执行权限:
chmod +x sync_emails.sh
之后直接运行脚本就能自动批量同步所有用户了:
./sync_emails.sh
额外的安全提示
用root账号进行SSH免密登录其实存在一定安全风险,建议你在目标服务器上创建一个专门的、仅拥有doveadm操作权限的用户,再给这个用户配置SSH免密登录,这样能降低安全隐患。
备注:内容来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

