rsync 使用 --password-file 仍需要手动输入密码的问题通常由以下几个原因导致:
1. 文件权限问题
密码文件的权限必须设置为 600(仅所有者可读写):
chmod 600 /path/to/password-file
2. 密码文件格式
密码文件应该 只包含密码,没有用户名、空格或换行符(除非必要):
yourpassword
或者如果是 Samba 共享:
username = yourusername
password = yourpassword
domain = yourdomain
3. 使用方式错误
对于 rsync daemon 模式(使用 ::):
rsync -av --password-file=/path/to/password-file user@host::module/source/ dest/
对于 SSH 模式(使用 :):
--password-file 无效,应使用 SSH 密钥或 sshpass:
# 方法1:使用SSH密钥(推荐)
rsync -av -e ssh source/ user@host:dest/
# 方法2:使用sshpass(不安全)
sshpass -p 'password' rsync -av source/ user@host:dest/
4. 正确的完整示例
# 1. 创建密码文件
echo "yourpassword" > /tmp/rsync.password
chmod 600 /tmp/rsync.password
# 2. 执行rsync(daemon模式)
rsync -av --password-file=/tmp/rsync.password \
user@host::module/source/ /local/dest/
# 3. 清理(可选)
rm -f /tmp/rsync.password
5. 检查rsync服务端配置
确保服务端 /etc/rsyncd.conf 中设置了:
secrets file = /etc/rsyncd.secrets
auth users = username
6. 调试方法
添加 -vvv 参数查看详细输出:
rsync -avvv --password-file=/path/to/file user@host::module/source/ dest/
7. 替代方案:使用环境变量
export RSYNC_PASSWORD="yourpassword"
rsync -av user@host::module/source/ dest/
常见错误排查清单:
- [ ] 确认是 rsync daemon 模式(双冒号
::)
- [ ] 密码文件权限为 600
- [ ] 密码文件内容无多余字符
- [ ] 服务端配置正确
- [ ] 用户名在服务端的授权列表中
如果是 SSH 连接,请改用 SSH 密钥认证,这是更安全的方式。