How to save a file in vscode-remote SSH with a non-root user privileges

Geo*_*off 10 vscode-remote

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
Run Code Online (Sandbox Code Playgroud)

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')
Run Code Online (Sandbox Code Playgroud)

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

umi*_*itu 121

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

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

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

  • 此方法的一个问题是您无法以“root”身份“探索”。您只能保存(和打开)公开可读的文件。 (3认同)
  • 有用!谢谢哥们。处理文件权限真是太痛苦了。 (2认同)

Gau*_*hai 73

sudo chown -R $USER /path/to/folder
Run Code Online (Sandbox Code Playgroud)

这对我来说效果很好!

  • 这是一个非常糟糕的答案。1.因为我确信OP知道如何更改文件权限,并且足够理解错误,知道这样做会使错误消失。所以并没有真正回答如何在 vscode 中执行此操作的问题。2.因为这效率不高。3. root 拥有的文件通常由 root 拥有,这是有充分理由的。想象一下,如果您的服务器上有一个恶意进程试图每 1 分钟访问一次根拥有的文件。在不必要的时候改变它们几分钟可能会造成灾难性的后果。 (10认同)
  • @umitu 推荐的 VS Code 扩展更适合大多数场景。反复更改文件权限来测试被自动化过程覆盖的内​​容效率不高。 (3认同)

Bra*_*ung 23

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

真正的原因是:您的用户帐户(此处为“geoff”)需要首先获得目标目录的权限。

sudo setfacl -R -m u:geoff:rwx /etc/nginx/sites-available/default
Run Code Online (Sandbox Code Playgroud)

对于你的情况。


更一般的用法:

sudo setfacl -R -m u:username:rwx /path/to/directory
Run Code Online (Sandbox Code Playgroud)

该命令将帮助您获取该目录的权限/path/to/directory,而不影响任何其他用户或组的权限。不建议使用chown。该解决方案可在 Mac/Linux 上使用。

运行完上述命令后,您可以在 VS code 中编辑并保存。愿它对您有帮助。

  • 很好的答案,比把所有权归于自己要好得多:) (5认同)
  • 除非您想在 SSH 扩展中使用“另存为根”,否则这应该是正确的答案。将用户添加到目录的访问控制列表比更改所有权要好得多,更改所有权可能会产生许多不需要的连锁反应。 (2认同)

小智 7

当我试图在我的 VPS 上编辑 nginx conf 文件时,我遇到了同样的问题。github 上有一个未解决的问题:提升 SSH 远程权限,解决类似问题。

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


小智 6

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

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

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

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

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

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

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

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