我有一个远程服务器,想知道将文件传输到远程服务器的最佳方式是什么
- 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 使用任何身份验证方法获取 ssh shell除了不安全的密码提示。
- (如果你还不知道如何操作)请按照以下任一步骤操作许多教程如何通过 ssh 实现无密码登录
- 像平常一样使用 rsync,无需任何密码提示。
只是不要忘记,只要远程主机的 /root/.ssh/authorized_keys 中有此行,该机器就会接受来自您 PC 的 root 命令。
答案2
尝试这个
rsync -R -avz -e ssh --rsync-path="echo mypassword | sudo -S mkdir -p /remote/awesome/folder && sudo rsync" /home/user/my/awesome/folder [email protected]:/remote/lovely/folder --delete
这将使两个文件夹保持同步。请记住源始终是第一个。
NOPASSWD
另一种选择是,您可以在远程服务器上添加/etc/sudoers
这样的。
username ALL= NOPASSWD:/usr/bin/rsync
告诉NOPASSWD:/usr/bin/rsync
sudo 当您的用户运行时/usr/bin/rsync
或者只是rsync
不需要密码。