如何使用远程用户和 sudo 从远程复制文件夹?这些都不适用于具有权限的文件夹,并且会因权限被拒绝而失败:
scp -r [email protected]:/source/ /destination/
sudo scp -r [email protected]:/source/ /destination/
当我在远程进行 ssh 并执行sudo su
时,我可以查看这些文件和文件夹。对我来说,使用或其他方式并不重要,scp
只要它是基于 ssh 的。
scp
也许这是使用 sudo 权限作为安全利益的限制。然而,能够 ssh、执行sudo su
和查看所有文件夹,但却无法从远程下载,这确实令人沮丧(尽管您可以通过tar
下载来解决这个问题)
答案1
假设您拥有或可以授予自己 NOPASSWD 访问权限(无论是所有命令,还是只是“tar”或“cat”),它可以像
# For a single file
ssh [email protected] 'sudo cat /source/SINGLE_FILE' > /destination/SINGLE_FILE
# for recursive copying, use tar or cpio
ssh [email protected] 'sudo tar -C /source/ -czf - .' | tar -C /destination/ -xzf -
您必须在远程端运行 sudo,然后通过将 stdout 写入到读取 stdin 的程序的程序来传输文件。
如果您需要能够输入 sudo 密码,事情会变得更加难看,但可以通过 rsync 服务器和端口转发来完成。
答案2
确保哪个用户必须使用sudo
-当地的或者偏僻的(或两者)用户?即sudo scp
仅影响当地的用户执行命令的权限scp
。
作为解决方案 - 尝试将source
文件移动到另一个目录下偏僻的用户所有权和权限并检查写入权限当地的用户位于destination
应创建文件夹的位置。
也尝试移动source
到偏僻的用户主目录 - 即所在路径~
(可能是服务器安全策略的结果)。
答案3
您尝试获取的文件应该具有修改权限(由 root 拥有或对此特定文件和文件夹的非可读权限),因此获取该文件的最简单方法是 scp 到 root 而不是用户。
scp -r [email protected]:/source /destination/
从安全角度来看,最好不允许此类事情,但如果您需要这样做,您应该使用密钥并将其保存到 /root/.ssh/authorized_keys