如何在 cron 中通过 ssh 使用 rsync?

Ark*_*rek 5 ssh cron rsync

我有一个私人虚拟服务器,我正在尝试从本地我的/home目录备份一些目录。

我准备了这个脚本:

#!/bin/bash

/usr/bin/rsync -rvvv /home/arkadiusz/scripts root@XXX.XXX.26.106:/home/backup/

/usr/bin/notify-send "Backup complete" "~/scripts -> vps" -i cryptkeeper
Run Code Online (Sandbox Code Playgroud)

在用户的 crontab 中,我添加了条目:

*/1 * * * * /home/arkadiusz/scripts/vps.sh > /home/arkadiusz/cron-vps.log 2> /home/arkadiusz/cron-vps.error.log
Run Code Online (Sandbox Code Playgroud)

执行shell脚本后,我的scripts目录没有出现在/home/backup/远程服务器上。在cron-vps.log文件中我只看到这个:

opening connection using: ssh -l root XXX.XXX.26.106 rsync --server -vvvre.iLsfx . /home/backup/  (9 args)
[sender] _exit_cleanup(code=12, file=io.c, line=226): about to call exit(255)
Run Code Online (Sandbox Code Playgroud)

cron-vps.error.log文件中,这是一个授权问题:

Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.1]
Run Code Online (Sandbox Code Playgroud)

我还检查sshd了远程服务器上的状态:

root@vpsXXXXXX:/home/backup# service sshd status
? ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2017-04-12 01:04:09 CEST; 12h ago
 Main PID: 281 (sshd)
   CGroup: /system.slice/ssh.service
           ??281 /usr/sbin/sshd -D

...

Apr 12 13:41:01 vpsXXXXXX.ovh.net sshd[5019]: Failed password for root from XXX.XXX.232.122 port 21782 ssh2
Apr 12 13:41:01 vpsXXXXXX.ovh.net sshd[5019]: Failed password for root from XXX.XXX.232.122 port 21782 ssh2
Apr 12 13:41:01 vpsXXXXXX.ovh.net sshd[5019]: Connection closed by XXX.XXX.232.122 port 21782 [preauth]
Run Code Online (Sandbox Code Playgroud)

根据这些日志,授权似乎有问题,但是当我尝试使用以下命令登录远程服务器时,我的 SSH 连接有效:

ssh root@XXX.XXX.26.106
Run Code Online (Sandbox Code Playgroud)

此外,该rsync命令在没有任何密码的终端中工作:

/usr/bin/rsync -rvvv /home/arkadiusz/scripts root@XXX.XXX.26.106:/home/backup/
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Jak*_*uje 4

在 cron-vps.error.log 文件中发现这是一个授权问题:

身份验证和授权是不同的问题。这是身份验证,失败了(在本例中是密码,从日志中可见)。

很可能您已将私钥设置为加密,但在正常会话中您没有注意到它,因为您已将其存储在ssh-agent. 它在您的会话中工作正常,但在从您的crontab.