你好,我正在尝试使用 rsync 在两个 Linux 服务器之间复制文件。两者都在 10.04.4 上
我已经设置了 ssh 和在 cron 作业下运行的脚本。这是我从 cron 作业中收到的消息。
收件人:mark@ubuntu 主题:Cron ~/rsync.sh 内容类型:text/plain;字符集=ANSI_X3.4-1968 X-Cron-Env:X-Cron-Env:X-Cron-Env:X-Cron-Env:消息 ID:<20120708183802.E0D54FC2C0@ubuntu> 日期:2012 年 7 月 8 日(星期日) 14:38:01 -0400 (EDT)
rsync:link_stat“/home/mark/#342#200#223rsh=ssh”失败:没有此文件或目录 (2) rsync:opendir“/Library/WebServer/Documents/.cache”失败:权限被拒绝 (13) rsync:recv_generator:mkdir“/Library/Library”失败:权限被拒绝 (13) * 跳过此失败目录中的任何内容 *rsync 错误:某些文件/属性未传输(参见前面的错误)(代码 23)位于 main.c(1060) [sender=3.0.7]
Q.1 谁能告诉我为什么我会收到此消息 -->
rsync:link_stat“/home/mark/#342#200#223rsh=ssh”失败:没有此文件或目录 (2)
脚本是:
#!/bin/bash
SOURCEPATH='/Library'
DESTPATH='/Library'
DESTHOST='192.168.1.15'
DESTUSER='mark'
LOGFILE='rsync.log'
echo $'\n\n' >> $LOGFILE
rsync -av –rsh=ssh $SOURCEPATH $DESTUSER@$DESTHOST:$DESTPATH 2>&1 >> $LOGFILE
echo “Completed at: `/bin/date`” >> $LOGFILE
Q2. 我知道我对权限有几个问题,我复制的所有文件通常都需要我使用 sudo 来操作它们。那么我的问题是,有没有办法可以运行此作业而不授予我的用户 root 访问权限或在登录时使用 root 权限?
谢谢您的帮助 。
答案1
至于问题 1,我猜您将“rsh”之前的双破折号当作了“en-dash”,即单个字符:——所以 rsync 将其解释为文件名而不是程序的选项。
对于 Q2,如果您想授予非 root 用户对文件进行操作的权限,否则它将无法操作,您要么必须更改文件的权限,要么提升用户的权限,例如通过使用sudo
。
sudo
可以配置为允许某些用户以 root 身份执行某些命令,而无需密码提示,因此您需要做的是将您需要以 root 身份执行的操作分离到一个脚本中,该脚本将执行这些操作(并且只执行这些操作),然后允许以 root 身份调用该脚本。以下是我的一个/etc/sudoers
文件中的示例:
Cmnd_Alias F2B_CLIENT_PING = /usr/bin/fail2ban-client ping
nagios ALL = NOPASSWD: F2B_CLIENT_PING
上述操作允许“nagios”用户使用 sudo 以 root 身份执行“/usr/bin/fail2ban-client ping”,而无需输入密码。我在监控中使用它。
你将会得到类似这样的结果:
Cmnd_Alias RSYNC_BACKUP = /usr/local/sbin/backup_my_stuff_with_rsync.sh
youruser ALL = NOPASSWD: RSYNC_BACKUP
然后在你的 cron 中调用sudo /usr/local/sbin/backup_my_stuff_with_rsync.sh
您可以先在命令行上进行测试,以验证它不要求输入密码。
请注意,以 root 身份运行脚本是一件大事,因此您必须确保您的脚本安全且正确。如果您能找到任何以非 root 身份执行此操作的方法,那就更好了。
答案2
修复这些文件的权限,使用
chown -R Mark:Mark *
你必须对所有这些 .dot 目录执行上述操作,除非你使用 find -exec 找到 Fanny