Vim 中的远程 sudo 编辑

Vim 中的远程 sudo 编辑

如何使用 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

根据此维基页面您应该像这样指定您的用户名和主机:

vim scp://user@server//etc/some/file

感谢您的提示,我不知道 vim 能够通过 scp 编辑文件。

答案3

扩展我的评论……

无论您使用什么帐户,Vim 都不会在远程计算机上执行这种花哨的操作。它仅限于下载和上传:读取远程文件意味着将文件下载到本地计算机上的临时位置,写入远程文件意味着将本地副本上传到远程计算机。

这意味着您将无法sudo在远程机器上进行编辑。

如果用于写入/上传文件的帐户不是 root,则您无法覆盖 root 拥有的文件。这是基本的 UNIX/服务器安全性。

相反,ssh进入服务器并在那里使用 Vim 或使用正确的帐户的 KL-7 代码片段。

请参阅:help netrw-xfer:help netrw-quickmap以了解目录列表等附加功能。暂无sudo相关信息。

相关内容