![连接到 Linux 服务器并复制文件时将用户更改为 root](https://linux22.com/image/37344/%E8%BF%9E%E6%8E%A5%E5%88%B0%20Linux%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%B9%B6%E5%A4%8D%E5%88%B6%E6%96%87%E4%BB%B6%E6%97%B6%E5%B0%86%E7%94%A8%E6%88%B7%E6%9B%B4%E6%94%B9%E4%B8%BA%20root.png)
我的脚本的编码方式不允许您直接通过 root 连接到服务器。这段代码基本上将服务器上的文件复制到我的计算机上,它可以工作,但我无法访问许多文件,因为只有 root 可以访问它们。如何以用户身份连接到服务器,然后通过切换到 root 来复制其文件?
我要更改的代码:
sshpass -p "password" scp -q -r [email protected]:some_directory copy_it/here/
换句话说,我希望能够远程复制只能由远程服务器上的 root 访问的文件,但不希望以 root 身份直接通过 ssh/scp 访问远程服务器。
是否可以仅通过 ssh 而不能通过 sshpass?
答案1
你最好用键(不是密码)自动远程登录。
如果您想获得 root 访问权限,则需要无密码的“su”,或者更好地配置“sudo”以便能够使用 root 用户执行命令。
然后你可以使用“ssh”(不是scp)登录远程服务器并执行命令。然后您可以使用 tar/lszrz/whatever 来传输文件。
像这样:
ssh remote.server.com sudo tar fc - /path/on/the/remote/server | tar fx -
这应该将 /path/on/the/remote/server 复制到您的当前目录。
编辑:请记住,允许您的用户这样做sudo tar
并不安全。
答案2
因此,方法是远程执行命令,通过 sudo 将文件复制到远程计算机上的 /tmp,将其所有者更改为连接的用户,然后从 /tmp 远程复制它们:
ssh [email protected] "sudo cp -R some_directory /tmp"
ssh [email protected] "sudo chown -R username:username /tmp/some_directory"
scp -q -r [email protected]:/tmp/some_directory copy_it/here/
ssh [email protected] "rm -r /tmp/some_directory"