首页 > 解决方案 > 与其他用户连接时,是否可以在远程服务器上以 root 身份运行 RSYNC?

问题描述

我想将我的服务器日志(/var/log/httpd/)备份到我家的本地磁盘。问题是日志目录由专门无法通过 SSH 连接到机器的帐户拥有。

我可以使用我的常规帐户通过 SSH 连接到远程机器,然后我可以 sudo 访问这些日志文件。有没有一种方法可以从我的家用计算机运行 RSYNC,但让它以 root 身份运行,以便它具有访问这些日志文件并将它们发回给我所需的权限?

一个典型的例子(从我家的本地机器上运行):

rsync -avz [user]@[server]:/var/log/httpd/* ./logs

显然,如果 [user] 的帐户有权访问 /var/log/httpd/,这将起作用,但它没有(而且我宁愿不授予该帐户权限)。

所以我想知道是否有其他命令可以注入到该 RSYNC 请求的中间,即使登录是通过 [user] 最终强制远程用户以 root 身份操作?

我还应该注意,我不想倒退。换句话说,我意识到我可以登录远程机器,切换到 root,然后以另一种方式运行 RSYNC。问题是出于各种原因,我不想将家用机器配置为接受远程登录。所以我只想把文件拉下来,而不是把它们发上来,可以这么说。

提前致谢!

标签: loggingserverrootrsync

解决方案


你有两种方法来实现你想要的。

第一:在远程主机上使用 rsyncd 并添加配置文件(/etc/rsyncd.conf):

[httpd_logs]
uid=0
gid=0
read only = yes
path = /var/log/httpd/

保存更改并启动 rsyncd。然后,在本地机器上运行:

rsync -avz remote_server::httpd_logs/* ./logs

第二:基于我在 stackoverflow 和此类门户网站上找到的答案

创建帮助文件:

cat > ssh_sudo << 'EOF'
{
  echo $sudoPWD;
  cat - ;
} | ssh -A $* &
EOF
chmod u+x ssh_sudo

然后与 rsync 一起使用:

read -s -p "Sudo password: " sudoPWD; rsync -aAHe ./ssh_sudo --rsync-path "sudo -S 2> /dev/null rsync" remote_norootuser@remote_host:/var/log/httpd/* ./logs/

当然,“remote_norootuser”必须对“remote_host”有 sudo 权限。


推荐阅读