如何使用 sudo 编辑远程文件?
我可以 ssh/scp 访问远程服务器,并在其上进行无密码 sudo。
我想/etc/some/file
以远程根身份进行编辑,因此我运行:
$ Vi scp://server/etc/some/file
但是它不起作用,提示我权限不足。我该怎么做?
答案1
下面是一小段bash
可以完成您想要的操作的脚本:
#!/bin/bash -ex
TMP_FILE=$(basename "$2")
ssh -t "$1" "/bin/bash -c \"
mkdir -p /tmp/remote-sudoedit/
cd /tmp/remote-sudoedit/
/usr/bin/env SUDO_EDITOR=cat sudoedit '$2' | tee '$TMP_FILE'\""
nvim scp://"$1"//tmp/remote-sudoedit/"$TMP_FILE"
ssh -t "$1" "/bin/bash -c \"
cd /tmp/remote-sudoedit/
sudo cp '$TMP_FILE' '$2'
rm '$TMP_FILE'\""
答案2
答案3
扩展我的评论……
无论您使用什么帐户,Vim 都不会在远程计算机上执行这种花哨的操作。它仅限于下载和上传:读取远程文件意味着将文件下载到本地计算机上的临时位置,写入远程文件意味着将本地副本上传到远程计算机。
这意味着您将无法sudo
在远程机器上进行编辑。
如果用于写入/上传文件的帐户不是 root,则您无法覆盖 root 拥有的文件。这是基本的 UNIX/服务器安全性。
相反,ssh
进入服务器并在那里使用 Vim 或使用正确的帐户的 KL-7 代码片段。
请参阅:help netrw-xfer
和:help netrw-quickmap
以了解目录列表等附加功能。暂无sudo
相关信息。