为什么这个rsync + ssh cron作业给我’Permission denied(publickey)’错误?

我经常备份到我想要每天同步到远程服务器的本地驱动器。

目标服务器仅配置为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] 

有关如何进一步排除故障的任何提示?


这是我到目前为止所尝试过的,而且我没有想法:

  1. Cron绝对是运行ps aux | grep cron ps aux | grep cron
  2. / var / log / syslog Sep 7 13:22:01 desktop CRON[6735]: (tom) CMD (sh /home/tom/Documents/Scripts/offsite-backup)没有什么exceptionSep 7 13:22:01 desktop CRON[6735]: (tom) CMD (sh /home/tom/Documents/Scripts/offsite-backup)

  3. 作为备份用户,在终端中将SSH连接到远程服务器ssh backups-user@XX.XX.XX.XX

  4. 在终端中运行命令完美地工作rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
  5. 手动指定backup-user键的路径无效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/

  6. 使用简单的测试命令替换不起作用的命令可以echo "Hello world" > ~/Desktop/test.txt

  7. 在计算机上大喊大叫没有任何影响(但让我感觉暂时好转)。


编辑1:

这是我的crontab文件和它调用的脚本。

 ... # mh 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 CRON[24421]: pam_unix(cron:session): session closed for user root这是令人困惑的,因为我不再在本地每分钟运行一次cron,但在服务器日志中每分钟仍会出现一个新条目。 服务器上所有用户(包括root用户)的Crontab文件都是空的,什么都不做。

此外,用户’仅备份’仅在服务器上创建且权限有限,并且专用SSH密钥已复制到我的桌面计算机。 我假设这是要走的路,因为在手动运行命令时一切正常。

上面发布的crontab文件适用于我,桌面计算机上的用户’tom’。 我的目的是让它调用脚本,该脚本应该以用户’仅备份’的身份登录到服务器。 我只是尝试运行备份脚本(而不是其中的命令)并且它已成功连接并工作。 我在桌面上以用户’tom’运行它,同一个用户创建了无法工作的cron作业。 这是与成功登录对应的服务器日志的输出

 Sep 11 08:35:31  sshd[25071]: error: Could not load host key: /etc/ssh/ssh_host_ed25519_key Sep 11 08:35:32  sshd[25071]: Accepted publickey for backups-only from  port 54242 ssh2: RSA e2:e6:07:27:c1:continues... Sep 11 08:35:32  sshd[25071]: pam_unix(sshd:session): session opened for user backups-only by (uid=0) Sep 11 08:35:32  systemd-logind[638]: New session 12 of user backups-only. Sep 11 08:36:00  sshd[25133]: Received disconnect from : 11: disconnected by user Sep 11 08:36:00  sshd[25071]: pam_unix(sshd:session): session closed for user backups-only 

由于从命令行一切正常,错误Permission denied (publickey)意味着rsync的SSH部分使用的是与指定用户名不同的身份文件。

从Jan对原始问题的评论 ,我们可以使用-e 'ssh -i /path/to/identity.file' ...rsync命令中指定身份文件。

使用以下命令从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/" 

我对这个发现仍然很感兴趣。 它可能与cron有关,它以最小的环境变量和ssh-agent开始。 我将在几天内设置相同的方案来测试它并报告回来。

你有没有尝试过清理主机文件的老技巧? 我的意思是:

 rm ~/.ssh/known_hosts 

这是值得尝试的,因为ssh将重建它,你将摆脱陈旧的东西。 您当然也可以删除属于给定IP /主机的部件。

更多问题:您的cron作业是在您的UID下运行还是以用户cron或root身份运行?

rrsync脚本与专用ssh密钥一起使用,如下所示:

远程服务器

 mkdir ~/bin gunzip /usr/share/doc/rsync/scripts/rrsync.gz -c > ~/bin/rrsync chmod +x ~/bin/rrsync 

本地电脑

 ssh-keygen -f ~/.ssh/id_remote_backup -C "Automated remote backup" #NO passphrase scp ~/.ssh/id_remote_backup.pub devel@10.10.10.83:/home/devel/.ssh 

远程计算机

 cat id_remote_backup.pub >> authorized_keys 

预先添加到新添加的行中

 command="$HOME/bin/rrsync -ro ~/backups/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding 

所以结果看起来像

 command="$HOME/bin/rrsync -ro ~/backups/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAA...vp Automated remote backup 

本地

使用x权限将以下脚本放入crontab

 #!/bin/sh echo "" echo "" echo "CRON:" `date` set -xv rsync -e "ssh -i $HOME/.ssh/id_remote_backup" -avzP devel@10.10.10.83:/ /home/user/servidor 

资料来源: http : //www.guyrutenberg.com/2014/01/14/restricting-ssh-access-to-rsync/

要尝试调试添加到ssh部分“ssh -v”这样,您可以获得详细模式和一些有用的信息。

编辑:从手册页:

 -v Verbose mode. Causes ssh to print debugging messages about its progress. This is helpful in debugging connection, authentication, and configuration problems. Multiple -v options increase the verbosity. The maximum is 3. 

我认为你还没有正确配置sshd_config文件。 validationPermitRootLogin yesPubkeyAuthentication yes进行远程维护。