我经常备份到本地驱动器,我想每天将其同步到远程服务器。
目标服务器仅配置用于SSH密钥(无密码)访问。由于该服务器的主要SSH密钥受密码保护,因此我创建了第二个SSH密钥(无密码保护)+用户用于无人值守备份 -这样,当cron运行时,我不必在场输入密码。
我正在使用cron和rsync,所有命令都可以单独工作,但是结合使用时会失败。
故障排除运行时我所能得到的最大
env -i sh -c "rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/"
返回错误
Permission denied (publickey).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.0]
关于如何进一步解决此问题的任何提示?
到目前为止,这是我尝试过的方法,但我没有主意:
- Cron肯定在运行
ps aux | grep cron
在/ var / log / syslog中没有异常
Sep 7 13:22:01 desktop CRON[6735]: (tom) CMD (sh /home/tom/Documents/Scripts/offsite-backup)
备份用户正常工作时,在终端到远程服务器的SSH
ssh backups-user@XX.XX.XX.XX
- 在终端中运行命令效果很好
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
手动指定备份用户密钥的路径无效
rsync -lrstRO --delete --exclude 'lost+found' -e 'ssh -i /home/tom/.ssh/backups-only' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
用简单的测试命令替换无法正常运行的命令
echo "Hello world" > ~/Desktop/test.txt
在计算机上大喊大叫没有任何作用(但让我暂时感觉好些)。
编辑1:
这是我的crontab文件及其调用的脚本。
...
# m h dom mon dow command
MAILTO=""
* * * * * sh /home/tom/Documents/Scripts/offsite-backup
和
#!/bin/bash
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
编辑2:
为了澄清,/var/log/auth.log
在目标服务器上包含以下行:Sep 11 08:23:01 <hostname> CRON[24421]: pam_unix(cron:session): session closed for user root
这令人困惑,因为我不再在本地每分钟运行cron了,但是服务器日志中的每分钟仍然出现一个新条目。服务器上所有用户(包括root用户)的Crontab文件均为空且不执行任何操作。
此外,仅在服务器上创建用户“仅备份”,并且权限有限,并且将专用的SSH密钥复制到了我的台式机上。我假设这是可行的方法,因为手动运行命令时一切正常。
上面发布的crontab文件对我来说是我的台式机上的用户“ tom”。我的意图是让它调用应以“仅备份”用户身份登录到服务器的脚本。我只是尝试运行备份脚本(而不是其中的命令),它成功连接并正常工作。我以用户“ tom”在桌面上运行它,该用户创建了cron作业,但该用户无法正常工作。这是与成功登录相对应的服务器日志的输出
Sep 11 08:35:31 <hostname> sshd[25071]: error: Could not load host key: /etc/ssh/ssh_host_ed25519_key
Sep 11 08:35:32 <hostname> sshd[25071]: Accepted publickey for backups-only from <desktop IP> port 54242 ssh2: RSA e2:e6:07:27:c1:continues...
Sep 11 08:35:32 <hostname> sshd[25071]: pam_unix(sshd:session): session opened for user backups-only by (uid=0)
Sep 11 08:35:32 <hostname> systemd-logind[638]: New session 12 of user backups-only.
Sep 11 08:36:00 <hostname> sshd[25133]: Received disconnect from <desktop IP>: 11: disconnected by user
Sep 11 08:36:00 <hostname> sshd[25071]: pam_unix(sshd:session): session closed for user backups-only
Sep 7 14:45:01 <hostname> CRON[18716]: pam_unix(cron:session): session closed for user root
Sep 7 16:06:02 <hostname> sshd[6747]...
。您是否100%肯定此日志行来自服务器并且它是正确的行?您发布的crontab是仅备份的crontab 吗?另外,尝试手动添加身份文件:rsync .... -e 'ssh -i /home/user/.ssh/identity' ...
auth.log
您在Edit 2下发布的那一行是针对在服务器上运行的cron的,与您的登录尝试无关。您tail -f /var/log/auth.log
是否可以在尝试通过cron运行脚本时在服务器上尝试?另外,我不确定这是否行得通,但是您可以尝试使用第一个env
命令rsync .... -e 'ssh -vvv -i /home/user/.ssh/identity ...
查看它是否吐出更多错误吗?