我发现这个问题解释了如何使用 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/...文件肯定在那里)
我在 SFTP 会话中并导航到一个深层目录。我做了ls -l,看到了一个小文件,想读一读。我更愿意在我还在使用 SFTP 时执行它,而不是启动一个新终端,执行 SSH,导航到那个深层目录,然后阅读它,然后返回到 SFTP 继续。
有没有办法做到这一点?
SFTP 没有cat命令。
我试过get file -,希望它会被-视为标准输出,但这只会创建一个名为“-”的文件。
我试过了get file /dev/stdout,但结果是:
sftp> get file /dev/stdout
Fetching /home/username/file to /dev/stdout
/home/username/file 100% 506 9.0KB/s 00:00
ftruncate "/dev/stdout": Invalid argument
Couldn't write to "/dev/stdout": Illegal seek
Run Code Online (Sandbox Code Playgroud)
另一种方法可能是get file /tmp/file,从 SFTP 出来,读取 /tmp/file,删除 /tmp/file,然后返回到 SFTP,但这同样乏味。有没有简单的方法?