将本地文件复制到远程服务器,非 root 权限优于 sudo?

将本地文件复制到远程服务器,非 root 权限优于 sudo?

我想做这样的事情:

scp local_file remote_server:/some_directory

但是为了获得 /some_directory 的权限,我们需要调用sudo。我知道类似的问题在这里已经被问过好几次了,但大多数答案要么利用了sudo密码缓存(出于某种原因,在连续两次调用中似乎对我不起作用ssh),要么利用了我们是 root 的事实(所以我们可以设置无密码sudo或让 SSH 让 root 进入)。

在后者中,这两种解决方案似乎都不安全,所以我宁愿假设我们没有要求sudo成为 root,因此无法重新配置系统。在这种情况下可以做什么来简单地复制文件呢?

到目前为止,我的尝试如下:

( 
read -s -p 'Enter password: ' pass; 
echo $pass ; 
tar cf - local_file ) | ssh -t -t remote_server 'sudo tar -C /some_directory' )

有没有更好的办法?

答案1

我找到了一种优雅的方法来解决这些问题命名管道。这个想法是通过在远程端运行 tar 命令先进先出使您的普通用户可以读取该套接字。

这是一个例子。在远程端,您首先创建套接字:

remote$ sudo -s 
remote# mkfifo -m 600 /home/anarcat/tmpfifo
remote# chown anarcat /home/anarcat/tmpfifo

在本地端,您已经可以开始读取该套接字:

local$ ssh example.net "cat tmpfifo" | pv -s 2G | tar xfz -

(该pv -s 2G |部分完全是可选的,以获得一个不错的进度条管道观察器.)

然后在远程端,您可以开始写入:

remote# tar cfz /home/anarcat/tmpfifo files

这将files通过 SSH 连接进行复制。当然,您也可以直接在远程服务器上创建该 tarball 并使其可供用户访问,但这将需要存档的所有空间,而这些空间可能不可用。

完成此操作后,您可以将其fifo作为简单文件删除:

remote$ rm /home/anarcat/tmpfifo

相关内容