我发现这个问题解释了如何使用 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/...文件肯定在那里)
就像已接受的答案一样,我认为这不可能直接实现。
然而,我看到至少有两种方法可以实现你的目标。
ssh user@myserver sudo vim /some/file
Run Code Online (Sandbox Code Playgroud)
这有缺点:
但它有一个优点,那就是工作。
您可以将文件复制到本地,对其进行编辑,然后将其复制回来。您可以将其自动化,使其几乎与 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。如果第二次传输失败,它甚至会保留本地副本,因此您不会丢失更改。
该脚本可以使用许多改进(至少是错误检查),但这只是一个起点。
| 归档时间: |
|
| 查看次数: |
3089 次 |
| 最近记录: |