vim 可以以 root 身份编辑远程文件吗?

Mit*_*tch 11 vim remote sudo

我发现这个问题解释了如何使用 vim 编辑远程文件:

vim scp://user@myserver[:port]//path/to/file.txt
Run Code Online (Sandbox Code Playgroud)

是否可以sudo在远程主机上以 root(通过)身份执行此操作?

我已经尝试在远程主机上创建一个具有 root 权限的文件并使用上述内容进行编辑。Vim 可以看到内容,可以编辑它,可以保存它,但在远程主机上没有任何变化(可能是因为 vim 只是保存它的临时文件,然后把它交给 scp 放回去?)

使用我的用户保存的文件执行此操作时,它的行为符合预期。

我的 SSH 使用密钥进行身份验证,并且远程服务器具有用于我的 sudo 访问的 NOPASSWD

这个问题是类似的,但唯一的投票答案使用了 puppet,这绝对不是我想要使用的。


编辑:为了回应@drewbenn 在下面的评论,这是我的完整编辑过程:

vim scp://nagios//tmp/notouch
Run Code Online (Sandbox Code Playgroud)

/tmp/notouchroot拥有的文件在哪里,我看vim很快就显示

:!scp -q 'nagios:/tmp/notouch' '/tmp/vaHhwTl/0'
Run Code Online (Sandbox Code Playgroud)

这会自动消失以产生带有文本的空黑屏

"/tmp/vaHhwTl/0" 1L, 12C
Press ENTER or type command to continue
Run Code Online (Sandbox Code Playgroud)

按 Enter 允许我编辑文件

保存弹出和开头一样的scp命令,很快自动消失(很难及时读取但是scp和/tmp/...文件肯定在那里)

Zac*_*ady 9

我要说这是不可能的,因为vim没有执行远程命令。它只是scp用来复制文件,在本地编辑它并scp在完成后返回。正如这个问题中 所述,sudo通过scp是不可能的,建议您修改权限以完成您想要的操作,或者只是通过 ssh 连接到远程机器。


mar*_*elm 5

就像已接受的答案一样,我认为这不可能直接实现。

然而,我看到至少有两种方法可以实现你的目标。

远程运行 vim

ssh user@myserver sudo vim /some/file
Run Code Online (Sandbox Code Playgroud)

这有缺点:

  • 您与 vim 的交互是通过网络进行的。明显的延迟会很烦人,如果你的连接中断,vim 也会中断(最终)。
  • 这不会使用本地的 vim 配置,而是使用远程 root 的 vim 配置。

但它有一个优点,那就是工作。

在 vim 之外执行 scp

您可以将文件复制到本地,对其进行编辑,然后将其复制回来。您可以将其自动化,使其几乎与 vim 的 scp 支持一样无缝。

类似下面的 shell 脚本可以工作(注意,完全未经测试!):

#! /bin/sh

TMPFILE=$(mktemp)
ssh -- "$1" sudo cat "'$2'" > ${TMPFILE}
vim ${TMPFILE}
ssh -- "$1" "sudo tee '$2' > /dev/null" < ${TMPFILE} && \
  rm -f ${TMPFILE}
Run Code Online (Sandbox Code Playgroud)

这将允许你做类似的事情rvim user@myserver /some/file。如果第二次传输失败,它甚至会保留本地副本,因此您不会丢失更改。

该脚本可以使用许多改进(至少是错误检查),但这只是一个起点。