rsync文件到远程服务器

我有一个远程服务器,并想知道什么是将文件传输到远程服务器的最佳方式

  • SSH只能由一个用户使用
  • / var / www中的每个目录都有一个特定用户作为所有者。

所以我期待rsync,但需要指定另一个命令做的sudo部分。 否则,我得到一个许可被拒绝。

 $> rsync somefile -e "ssh" user@server:/var/www/whichever.site 

现在“用户”不拥有/ var / www的权限,但我想用该用户进入服务器,然后执行sudo。

显然,如果这个场景还有另一个“最佳实践”,我想知道。

  1. 在远程主机上,确保/ etc / ssh / sshd_config有这一行“PermitRootLogin without-password”(在许多发行版中,默认情况下是在那里)。 这允许root用除了不安全的密码提示之外的任何authentication方法来获得一个ssh shell。
  2. (如果您还不知道如何操作),请按照有关如何通过ssh获取无密码login的许多教程
  3. 像通常一样使用rsync,并且没有任何密码提示。

只要不要忘记,只要远程主机的/root/.ssh/authorized_keys在那里,机器接受来自PC的root命令。

尝试这个

  rsync -R -avz -e ssh --rsync-path="echo mypassword | sudo -S mkdir -p /remote/awesome/folder && sudo rsync" /home/user/my/awesome/folder user@xxxx:/remote/lovely/folder --delete 

这将保持两个文件夹同步。 记住源始终是第一位的。

另一种方法是你可以像这样在远程服务器上的/etc/sudoers添加一个NOPASSWD

 username ALL= NOPASSWD:/usr/bin/rsync 

NOPASSWD:/usr/bin/rsync告诉sudo,当你的用户运行/usr/bin/rsync或者rsync ,不需要密码。