Linux

使用 rsync 的 ssh 連接操作超時

  • July 2, 2013

我使用 rsync 在本地設備上備份遠端伺服器,但是當我將它與 cron 作業結合使用時,我的 ssh 超時。需要明確的是,數據儲存在遠端伺服器上,我希望它儲存在本地伺服器上。備份請求必須從我的本地伺服器發送到遠端伺服器。

當我像這樣在終端中輸入數據時,備份數據的命令正在工作:

rsync -chavzP --stats USERNAME@IPADDRES: PATH_TO_BACKUP LOCAL_PATH_TO_BACKUP

但是當我將它與這樣的 cron 作業結合起來時:

10 11 * * * rsync -chavzP --stats USERNAME@IP_ADDRESS: PATH_TO_BACKUP LOCAL_PATH_TO_BACKUP

ssh 連接超時。當 cronjob 執行時,它會向 root 使用者發送一封郵件,輸出如下:

From local.xx.xx.xx  Tue Jul  2 11:20:17 2013
X-Original-To: username
Delivered-To: username@username.local
From: username@username.local (Cron Daemon)
To: username@username.local
Subject: Cron <username@server> rsync -chavzP --stats USERNAME@IPADDRES: PATH_TO_BACKUP LOCAL_PATH_TO_BACKUP
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=username>  
X-Cron-Env: <USER=username>
X-Cron-Env: <HOME=/Users/username>
Date: Tue,  2 Jul 2013 11:20:17 +0200 (CEST)

ssh: connect to host IP_ADDRESS port XX: Operation timed out
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: unexplained error (code 255) at /SourceCache/rsync/rsync-42/rsync/io.c(452)          [receiver=2.6.9]

所以 rsync 命令在終端輸入時有效,但在 cronjob 使用時無效。有人可以解釋一下嗎?

當您從 cron 執行命令時,它無法像從 shell 執行時那樣訪問您的環境資訊。這意味著它找不到您的 ssh 密鑰或您用來設置 SSH 代理的任何環境變數。

如果您使用的是無密碼密鑰,請將您的 rsync 行更改為:

rsync -chavzP -e "ssh -i /Users/username/.ssh/YOUR_PRIVATE_KEY_HERE" --stats USERNAME@IP_ADDRESS: PATH_TO_BACKUP LOCAL_PATH_TO_BACKUP

引用自:https://serverfault.com/questions/520137