如何以非root用户远程复制主机根目录下的目录?
非root用户远程复制root目录文件的解决办法
以下几种方法可以解决你没有root密钥,但需要复制远程root权限目录的问题:
方法一:通过管道远程打包后直接解压到本地
利用ssh执行远程sudo tar打包,同时把输出通过管道传到本地解压,全程不在远程生成临时打包文件,高效又安全:
ssh user@<host> "sudo tar -czf - /path/to/root/folder" | tar -xzf -
注意:你的远程用户需要有sudo权限,且执行sudo时要么已经缓存了密码,要么配置了免密(后面会说明)。
方法二:临时修改远程目录权限(谨慎使用)
如果允许的话,先临时给目标目录开放其他用户的读权限,复制完成后再恢复:
# 临时添加读权限 ssh user@<host> "sudo chmod -R o+r /path/to/root/folder" # 复制目录到本地 scp -r user@<host>:/path/to/root/folder . # 恢复原权限 ssh user@<host> "sudo chmod -R o-r /path/to/root/folder"
⚠️ 这个方法要注意,复制完成后一定要及时改回权限,避免敏感文件暴露。
方法三:用rsync配合sudo实现增量复制
如果需要复制大文件或者后续要增量同步,rsync是更好的选择,同样通过远程sudo执行:
# 管道直接传输,无需临时文件 ssh user@<host> "sudo rsync -avz /path/to/root/folder -" | rsync -avz - ./local_target_folder
或者先在远程临时复制一份到用户可访问的目录,再同步:
ssh user@<host> "sudo cp -r /path/to/root/folder /tmp/temp_copy && sudo chown -R user:user /tmp/temp_copy" rsync -avz user@<host>:/tmp/temp_copy . ssh user@<host> "sudo rm -rf /tmp/temp_copy"
方法四:配置远程sudo免密(适合频繁操作)
如果经常需要执行这类操作,可以让远程服务器的sudoers配置允许你的用户免密执行tar、rsync等命令:
- 远程登录后执行
sudo visudo编辑配置 - 添加一行:
user ALL=(ALL) NOPASSWD: /bin/tar, /usr/bin/rsync
- 保存退出后,后续执行远程
sudo相关命令就不用输密码了。
内容的提问来源于stack exchange,提问作者DISCO
相关产品推荐
相关产品推荐

