9

我有一个 Web 服务器 (odin) 和一个备份服务器 (jofur)。在 jofur 上,我可以运行以下代码将我的 Web 目录(通过密钥身份验证)从 odin 同步到 jofur:

rsync -avz -e ssh backups@odin.mydomain.net:/home/backups /home/myuser/odin

如果我在命令行中输入这个,一切 rsyncs 完美:

myuser@jofur:~$ rsync -avz -e ssh backups@odin.mydomain.net:/home/backups /home/myuser/odin

receiving incremental file list

sent 23 bytes  received 1921 bytes  1296.00 bytes/sec
total size is 349557271  speedup is 179813.41

我希望它每天早上运行,所以我编辑了我的 crontab 来阅读这个:

0 4 * * * rsync -avz -e ssh backups@odin.mydomain.net:/home/backups /home/myuser/odin

这行不通。以下消息存放在 /var/mail/myuser 中:

无法创建目录“/home/myuser/.ssh”。主机密钥验证失败。rsync:连接意外关闭(到目前为止已收到 0 个字节)[Receiver] rsync 错误:io.c(605) [Receiver=3.0.9] 处出现无法解释的错误(代码 255)

我不确定这个错误是什么意思。我对盲目使用权限持谨慎态度,因为我不想让任何后门敞开。有什么建议么?

4

8 回答 8

2

我有一个类似的问题。我的是 HOME 目录已加密。

如果您的用户已登录,它将在 known_hosts 中运行。

但是当它是一个 cron 时,该 cron 使用正确的用户但它无权访问您的 $HOME/~/.ssh 目录,因为它是加密的:-(

于 2013-03-08T17:09:05.427 回答
2

很难判断 cron 是否使用了错误的 rsync 二进制文件,或者 rsync 是否需要某些未在 cron 中设置的变量。请按如下所示设置 stdout/stderr 并传递日志文件的输出

另外,尝试从命令行执行“which rsync”;这将告诉您从命令行使用哪个 rsync。

0 4 * * * rsync -avz -e ssh backups@odin.mydomain.net:/home/backups /home/myuser/odin > /tmp/cron_output.log 2>&1

编辑 :

您能否创建一个名为 SOME_DIR/cron_job_rsync.sh 的 shell 脚本,其中包含以下内容。确保设置了执行位。

#!/bin/sh
/usr/sbin/rsync -avz -e ssh backups@odin.mydomain.net:/home/backups /home/myuser/odin

并修改cronjob如下图

0 4 * * * SOME_DIR/cron_job_rsync.sh >/tmp/cron_output.log 2>&1
于 2012-12-28T22:33:35.370 回答
1

我和你一样遇到同样的错误。

我终于发现用户主目录是一个“挂载点”,登录后它发生了变化。

您可以使用 shell 命令“mount”来检查您是否有相同的方式使用主目录。

所以,我登录并“cd /”,然后执行

```

cp -ar ${HOME}/.ssh /tmp/
sudo umount ${HOME}
mv /tmp/.ssh ${HOME}

```

有可能会失败,因为你需要检查${HOME}是否有写权限,如果没有,试试sudo或者添加writable到${HOME}。

在那之后,一切都很好。

于 2017-01-20T05:42:25.483 回答
0

我通过与我的服务器管理员沟通解决了这个问题。这是他们告诉我的:

对于高级安全性和性能,我们使用 1H (Hive),它为用户使用 chrooted 环境。应将库和二进制文件复制到 chrooted 环境以使其可访问。

他们给我发了一封后续电子邮件,告诉我“相关”软件包已安装。到那时,问题就解决了。不幸的是,我没有从他们那里得到任何额外的信息。主机是 Arvixe,但我猜任何使用 1H (Hive) 的人都会遇到类似的问题。希望这个答案会有所帮助。

于 2013-12-04T20:54:56.167 回答
0

请按照以下步骤避免错误 http://umasarath52.blogspot.in/2013/09/solved-rsync-not-executing-via-cron.html

于 2013-09-27T18:01:01.600 回答
0

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

当地的

在获得许可的情况下放入crontab以下脚本:x

#!/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/

于 2016-12-12T15:35:43.170 回答
0

我做了几个步骤让它工作。

  1. 检查你的路径。对于每个命令,您将使用检查which [command]并使用该 crontab 的完整路径

  2. 以您要运行它的用户身份打开 crontab,以便它可以访问该用户的 ssh-key

  3. 添加(记住哪个用户)ssh-agent && [your ssh-command],以便它可以通过 ssh 连接。

  4. 此时身份验证仍然失败。尝试生成无密码的 ssh 密钥。这样您就可以跳过密码提示。

对于调试,将 -vvv 添加到 rsync 中的 ssh 命令很有用。它清楚地表明出了什么问题。

于 2017-05-22T08:25:58.347 回答
0

使用正确的密钥环为我解决了这个问题。将以下行添加到您的 crontab:

SSH_AUTH_SOCK=/run/user/1000/keyring/ssh

总的来说,您的 crontab(通过crontab -e从终端调用进行编辑)现在应该如下所示:

SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
0 4 * * * rsync -avz backups@odin.mydomain.net:/home/backups /home/myuser/odin

背景:事实证明,一些 Linux 发行版使用密钥环来保护您的公私密钥对 - 因此密钥对受到密码保护,而您不会注意到。因此,rsync无法打开您的 ssh 密钥进行身份验证。

请注意,我也省略了-e ssh; 我认为这里没有必要。

进一步的故障排除: rsync不提供大量的调试输出。帮助我确定问题的是scp在我的 crontab 中放置了一个更详细的虚拟命令。用于故障排除的 crontab 条目可能类似于:

* * * * * scp -v backups@odin.mydomain.net:/home/backups/dummy.txt /home/myuser/odin/dummy.txt >> /home/myuser/odin/dummy.txt.log 2>&1

上面的命令将每分钟运行一次(非常适合开发),它会将文件复制/home/backups/dummy.txt到您的本地计算机。所有日志(stdout 和 stderr)都写入到/home/myuser/odin/dummy.txt.log. 检查这些日志以查看错误的确切来源。

参考:上面解释的故障排除引导我找到解决方案:https ://unix.stackexchange.com/a/332353/395749

于 2020-05-25T09:39:13.740 回答