目标服务器上的 Rsync shell 脚本权限错误

目标服务器上的 Rsync shell 脚本权限错误

这是我第一次尝试使用 bash 脚本,我正在尝试将 OS X 上的项目文件夹 rsync 到运行 ubuntu 14.04 的开发服务器。当我尝试以用户“developer”身份 rsync 时,我在目标服务器上收到一些权限错误,但当我以用户“ubuntu”身份执行此操作时也会收到这些错误。由于 EC2 上的默认云服务器设置,我无法以 root 身份尝试。

这是我的 shell 脚本。

#!/bin/bash
rsync -r —l -t -z -v -e "ssh [email protected]" --exclude “/Applications/MAMP/htdocs/finalall/nbproject/” --delete /Applications/MAMP/htdocs/finalall/ :/var/www/html
afplay "/System/Library/Sounds/Morse.aiff"

这是我的错误:

building file list ... rsync: link_stat "/Users/xxxxx/?\#200\#224l" failed: No such file or directory (2)
done
IO error encountered -- skipping file deletion
rsync: failed to set times on "/var/www/html/.": Operation not permitted (1)
./
rsync: recv_generator: mkdir "/var/www/html/nbproject" failed: Permission denied (13)
*** Skipping any contents from this failed directory ***
testerterst.php
nbproject/
rsync: mkstemp "/var/www/html/.testerterst.php.TISozV" failed: Permission denied (13)

sent 493 bytes  received 54 bytes  1094.00 bytes/sec
total size is 971  speedup is 1.78
rsync error: some files could not be transferred (code 23) at /SourceCache/rsync/rsync-42/rsync/main.c(992) [sender=2.6.9]

以下是 sudo cat /etc/group 的部分输出

ssh:x:108:
landscape:x:109:
admin:x:110:
ubuntu:x:1000:
ssl-cert:x:111:
developer:x:1001:

真诚感谢您的帮助。非常感谢。

输出为 ls -lZd / /var/ /var/www/ /var/www/html/

drwxr-xr-x 22 root root ? 4096 Aug  5 19:53 /
drwxr-xr-x 13 root root ? 4096 Aug  5 20:00 /var/
drwxr-xr-x  3 root root ? 4096 Aug  5 20:00 /var/www/
drwxr-xr-x  2 root root ? 4096 Aug  5 20:17 /var/www/html/

答案1

您没有目标服务器上 /var/www/html 的写权限,因为该文件夹属于 root ,其他所有人只有读/执行权限。

解决此问题的最佳方法是将该目录的所有者更改为您的 ssh 用户:

chown -R developer. /var/www/html

这会将 /var/www/html 及其所有子目录的所有者更改为开发人员用户及其默认组。

如果还有其他用户需要对同一目录具有写权限,我建议将他们放在一个组中,然后更改文件夹的权限以允许同一组中的每个人都具有写权限。下面向您展示如何做到这一点。

groupadd devs #Adds a group called devs

useradd -G devs ubuntu #Adds the devs group to the ubuntu user

chown -R .devs /var/www/html #Changes only the group of the directory to devs

chmod -R 775 /var/www/html #Allows the owner and group of the directory full access, everybody else only has read/execute

答案2

您无需更改目录所有权,而是可以分两个阶段进行:

  1. 同步
  2. ssh 在末尾附加了一个命令。

假设服务器在您本地的 ~/.ssh/config 中定义:

# rsync sourceDir to the home dir of yourname on theserver.
# ':' after 'theserver' invokes ssh as transport.
$ rsync -<options> sourceDir yourname@theserver:.

# You will be prompted for your theserver password for the cp.
# Change the cp source and dest to suit your needs.
$ ssh -t theserver "sudo cp -r sourceDir /var/www/. && rm -rf sourceDir"

相关内容