47

I am not able to save any files on my remote server with VSCode Remote SSH because I am not a root user.

I've followed the official documentation about how to set up ssh with SSH config file but even if my user as sudo privileges, I can't find any options in VSCode to save with sudo.

here is my SSH config file /Users/geoff/.ssh/config:

Host gcpmain
    User geoff
    HostName <IP_ADDRESS>
    IdentityFile ~/.ssh/gc_rsa

Obviously, when I try to save any files that require sudo I have this expected error message:

Failed to save 'default': Unable to write file (NoPermissions
 (FileSystemError): Error: EACCES: permission denied, open 
'/etc/nginx/sites-available/default')

Is there any way that I can force VSCode to save as sudo? Thanks a lot for your answers! :)

4

8 回答 8

25
sudo chown -R myuser /path/to/folder

这对我来说很好!

于 2021-07-02T16:16:14.070 回答
23

我推荐这个 VSCode 扩展:Save as Root in Remote SSH

在使用 Remote-SSH 打开的窗口上安装扩展,并在命令面板中使用“另存为根”而不是 Ctrl+S。

基本上,它读取编辑器的内容并调用 sudo 命令覆盖文件。

于 2021-06-19T06:00:56.837 回答
7

当我尝试在我的 VPS 上编辑 nginx conf 文件时,我遇到了同样的问题。github 上有一个未解决的问题:Elevate rights on SSH remote,解决了类似的问题。

作为临时解决方案,您可以使用 WinScp - 将 sudo /path/to/sftp-server添加到您的连接设置,然后您可以保存对大多数(如果没有的话)文件的更改。WinScp 在登录时使用 sudo

于 2019-05-25T10:36:37.817 回答
6

在使用 vs code 以非 root 帐户 ssh 登录 CentOS 时,我也遇到了同样的问题。

真正的原因是:你的用户账号(这里是“geoff”)需要先获得目标目录的权限。

sudo setfacl -R -m u:geoff:rwx /etc/nginx/sites-available/default

对于你的情况。


更一般的用法:

sudo setfacl -R -m u:username:rwx /path/to/directory

该命令将帮助您获得目录的权限/path/to/directory,而不会影响任何其他用户或组的权限。不推荐使用chown。此解决方案可用于 Mac/Linux。

完成上述命令后,您可以在 VS 代码中进行编辑和保存。愿它对你有所帮助。

于 2020-12-05T10:58:10.540 回答
6

使用 VSCode ssh(我使用带有 AWS 的 Ubuntu EC2 实例)在远程计算机上配置文件的最简单解决方案是在使用 chmod 处理文件时修改文件权限。

默认情况下,服务器配置文件(/etc/nginx/sites-available/default)是只读的(需要 sudo 来写入/保存)。允许 VSCode SSH sudo 访问存在未解决的问题,但是我找不到好的解决方案。

当您需要在 dev 中配置服务器文件时,请使用 sudo 权限在命令行 SSH(非 VSCode)中运行它:

sudo chmod a+rwx /etc/nginx/sites-enabled/default

(或任何您的服务器配置文件路径)。

然后,您可以使用 VSCode SSH 并自由保存编辑的文件。

如果您不喜欢通过命令行在 vim 中工作并想使用 VSCode 编辑服务器配置文件,这可能是最快的解决方案。完成后不要忘记将文件权限切换回只读:

sudo chmod -R 0444 /etc/nginx/sites-available/default

于 2021-01-19T17:56:06.440 回答
2

没有完全回答你的问题,但仍然有一个解决方法......

我在纯开发环境中遇到了同样的问题(远程 Linux 机器不在生产环境中,我有 root 密码)。我通过以 root 身份连接来解决它,同时限制你可以从哪里以 root 身份连接。

ssh-rsa ...Lots of text... dev@host

  • 更改条目,使其显示为:

from="9.8.7.6" ssh-rsa ...Lots of text... dev@host (其中 9.8.7.6 是您的 VSCode 开发机器)

编辑 VSCode 下的连接条目,使其内容如下:

# Read more about SSH config files: https://linux.die.net/man/5/ssh_config Host linuxdev HostName linuxdev.resolvable.fqdn User root

以上所有假设您知道 root 密码并且 sshd_config 已经有了PermitRootLogin=yes.

如果您想进一步限制 VSCode 开发机器的 SSH root 登录,那么您可以PermitRootLogin=no在 sshd_config 中全局设置并在 sshd_config 中添加一个新限制,如下所示(在文件末尾): Match Host 9.8.7.6 PermitRootLogin yes

然后重新启动 sshd ( systemctl restart sshd) 以应用新的 SSHD 权限。

于 2019-06-29T08:58:52.183 回答
0

我刚刚遇到的一种 Linux 解决方案是使用bindfs( sudo apt install bindfs)。

/etc/nginx要为root当前用户启用编辑,请使用~/.bind-mounts/nginx

mkdir -p ~/.bind-mounts/nginx
sudo bindfs --map=root/${USER}:@root/@$(id -gn) /etc/nginx ~/.bind-mounts/nginx
sudo umount ~/.bind-mounts/nginx # When you're done, or run bindfs with '-f' to keep it in the foreground

bindfs有很多选择--map可能不是最好的。到目前为止,它一直在我的测试中工作。

一切似乎都如您所愿。让您“探索”,root并且任何修改都将被视为您拥有root的权限。只是不要忘记安全隐患!

于 2022-02-07T20:33:36.187 回答
0

我使用 SSH 从本地 VSCode 连接到远程 Ubuntu 机器,并在 Ubuntu 机器内安装 VSCode。我能够创建文件,但不能在那里写任何东西。

我需要编写一个 Prometheus 配置文件,这就是我授予写权限的方式:

sudo chown -R ubuntu /etc/prometheus/prometheus.yml 
于 2021-10-02T05:30:24.280 回答