使用VS Code ssh工具编辑需要sudo权限的文件

13

我正在尝试在服务器上编辑一些apache配置文件。我想使用VS code ssh插件,但是由于我作为用户(具有sudo权限),而不是root登录到VM中,因此我没有找到保存配置文件的方法!我得到了一个权限被拒绝的错误。

我想可能有一种方法可以直接从VS code(我也尝试过winSCP,但没有结果)编辑文件,并在保存更改时以sudoer身份保存它们。

我从朋友那里听说,当他试图从VScode保存文件时,会提示重试为sudo。我没有得到这个,很遗憾我不知道任何更多的细节,除了他使用Macintosh。

我遇到的建议,但我不喜欢:

  1. 更改文件所有权
  2. 启用root登录

我尝试的建议

  1. 调整插件(尝试将sudo su强制作为第一个命令,配置extention.js,但出现写入空管道的错误)
  2. 使用winSCP

如果有人有使用另一个工具的建议,我很乐意听取。

规格

服务器运行Ubuntu 18,apache和我的PC Windows 10。如果需要其他规格,我会编辑此部分。

简而言之

我需要一种方法来编辑由root拥有的文件,以root权限用户身份登录。我想通过UI界面进行操作,因为我发现通过nano/vi编辑和创建多个文件很困难。


有关WinSCP,请参见https://winscp.net/eng/docs/faq_su。 - Martin Prikryl
@MartinPrikryl,我不愿意在我的机器上运行sftp服务器,但如果没有其他办法,我会尝试它。问题是,在不使用SFTP的情况下,我无法使用文章中的任何建议。甚至无法在终端会话中使用sudo -s命令。 - George T
我迷失了。你不需要在你的本地机器上运行SFTP。 - Martin Prikryl
是的,我的意思是在我的服务器上运行SFTP。我希望不要这样做,但作为最后的手段我会尝试一下。我不理解的是,为什么我不能通过ssh从编辑器中以sudo的身份编辑并保存文件。肯定有很多人遇到过类似的问题。而且我为什么没有获得重新尝试以sudo方式的提示窗口呢? - George T
所有的Linux服务器都内置了SFTP服务器。你确定你没有一个吗? - Martin Prikryl
6个回答

5

我曾经遇到过同样的问题,找到了唯一准确的解决方案:

使用SSH FS vscode扩展程序

并在设置文件setting.json的"sshfs.configs"部分中添加"sftpSudo": true(在扩展设置中轻松找到)。

这将自动连接用户sudo权限,并且我们可以随意修改所有文件。


1
你能解释一下这个问题与SSH FS扩展有什么关系吗? - JFS

3
我已经修复了VS代码扩展。如果你进入extension.js文件并查找运行命令(它是一个由字符串输出的函数数组,通过一个空格连接),你会发现它被命名为l。只需将命令列表添加到该列表中即可。
"-t sudo su"

它像魔法一样运行良好。

Image of the file


1
它可以工作!提示:编辑后关闭 SSH 窗口并重新打开。 - Jhon Didier Sotto
3
这在 Mac 上会在哪里? - Abhay Nayak
对我来说有两个文件:"C:\Users\blusc.vscode\extensions\ms-vscode-remote.remote-ssh-0.80.0\out\extension.js" 和 "C:\Users\blusc.vscode\extensions\ms-vscode-remote.remote-ssh-edit-0.80.0\out\extension.js"。 - Bluscream
这将取决于系统并且是防错的。看起来像是最小化的代码,你会发现有多个带有“l”的命令。你不能确定要将其添加到哪个命令中。@George T - 你有这方面的来源吗? - Shishir Gupta

2

提供的解决方案由Georg T提供,仍然有效,但在新版本中(例如0.92.0版本)代码可能会有所不同。

对于我来说,更容易搜索“运行脚本”并替换。

"bash"

在这个命令中,您可以看到:远程SSH代码片段

路径和文件名仍然是相同的:

C:\Users\<Username>\.vscode\extensions\ms-vscode-remote.remote-ssh-0.92.0\out\extension.js

1
对我无效。将“bash”替换为“-t sudo su”会导致以下错误:> channel 2: open failed: connect failed: open failed > channel 3: open failed: connect failed: open failed。VSCode一直要求选择平台,不停地重试连接。 - koral
对我来说,我不需要-t或者su。我只是将bash替换为sudo bash,现在已经以root身份连接上了。 - undefined

1
有一个叫做“Save as Root in Remote - SSH”的扩展。你可以试试看。

enter image description here


1
使用“Save as Root in Remote - SSH”可以解决这个问题。

https://marketplace.visualstudio.com/items?itemName=yy0931.save-as-root

它是在官方的Remote - SSH扩展的基础上构建的,可以让你通过命令面板(F1、Ctrl+Shift+P或Cmd+Shift+P)将文件保存为root用户。
它还允许你以root权限保存文件,但是作为特定的用户。在我的情况下,我需要将其保存为www-data。效果很好。
在使用Remote - SSH扩展连接到目标机器后,你必须再次安装提到的扩展。之后,“Save as Root”和“Save as Specified User”选项将在命令面板中可用。

enter image description here


0
这是适合我的配置。我使用Windows 11作为客户端,VSCode 1.82.0SSH FS v1.26.1,以及Rocky 8.6作为目标服务器。您必须在您的服务器上找到适当的SFTP服务器路径。
按下F1并打开“打开用户设置(JSON)”

enter image description here

{
"name": "server-01",
"privateKeyPath": "d:\#PERSONAL\SSH\id_rsa",
"port": 3223,
"group": "LAB",
"root": "/etc/config",
"host": "10.25.26.27",
"username": "admin",
"label": "lab-server-01",
"sftpCommand": "/usr/libexec/openssh/sftp-server", // Change this to reflect your server
"sftpSudo": true, // or use a username, e.g., "admin"
}

希望能对其他人有所帮助。

嗨 @prabowo.priyo,你能帮忙想个办法来配置这个文件,以便能够使用 sudo su - username 吗? - undefined
您可以尝试将目标用户名设置在"sftpSudo"字段中。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接