Tom*_*man 21 ssh permissions backup cron rsync
我经常备份到我想每天同步到远程服务器的本地驱动器。
目标服务器配置为仅用于 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/"
Run Code Online (Sandbox Code Playgroud)
返回错误
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]
Run Code Online (Sandbox Code Playgroud)
有关如何进一步解决此问题的任何提示?
这是我迄今为止尝试过的,但我没有想法:
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
Run Code Online (Sandbox Code Playgroud)
和
#!/bin/bash
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
Run Code Online (Sandbox Code Playgroud)
编辑2:
澄清/var/log/auth.log
一下,在目标服务器上包含一行Sep 11 08:23:01 <hostname> CRON[24421]: pam_unix(cron:session): session closed for user root
This is令人困惑,因为我不再在本地每分钟运行一次 cron,但每分钟都会在服务器日志中出现一个新条目。服务器上所有用户(包括 root)的Crontab 文件都是空的,什么也不做。
此外,用户 'backups-only' 仅在服务器上创建且权限有限,并将专用 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
Run Code Online (Sandbox Code Playgroud)
Ala*_*Ali 15
由于从命令行一切正常,错误Permission denied (publickey)
意味着 SSH 部分rsync
使用的身份文件与指定的用户名不同。
从Jan对原始问题的评论中,我们可以在rsync
命令中使用-e 'ssh -i /path/to/identity.file' ...
.
使用以下命令从 cron 中的新环境开始并指定文件的完整路径显然可以解决问题:
env -i sh -c "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/"
Run Code Online (Sandbox Code Playgroud)
我仍然对这个发现很感兴趣。它可能与 cron、它以最少的环境变量以及 ssh-agent 开始的事实有关。我将在几天内设置相同的场景来测试它并报告回来。
归档时间: |
|
查看次数: |
37771 次 |
最近记录: |