如何使用非 root 用户权限在 vscode-remote SSH 中保存文件

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

我无法使用 VSCode 远程 SSH 在我的远程服务器上保存任何文件,因为我不是 root 用户。

我已经按照 official documentation 了解如何使用 SSH 配置文件设置 ssh,但即使我的用户具有 sudo 权限,我也无法在 VSCode 中找到任何选项来保存须藤。

这是我的 SSH 配置文件 /Users/geoff/.ssh/config:

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

显然,当我尝试保存任何需要 sudo 的文件时,出现了预期的错误消息:

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

有什么方法可以强制 VSCode 保存为 sudo? 非常感谢你的回答! :)

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

作为临时解决方案,您可以使用 WinScp - 添加 sudo /path/to/sftp-server 到您的连接设置,然后您可以保存对大多数(如果不是任何)文件的更改。 WinScp use sudo on login.

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

我在纯开发环境中遇到了同样的问题(远程 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 登录,那么你可以在 sshd_config 中全局设置 PermitRootLogin=no 并在 [=52] 中添加一个新的限制=] 像这样(在文件末尾): Match Host 9.8.7.6 PermitRootLogin yes

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

我在用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 代码中编辑和保存。希望对您有所帮助。

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

默认情况下,服务器配置文件 (/etc/nginx/sites-available/default) 是只读的(需要 sudo 到 write/save)。存在允许 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

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

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

基本上,它读取编辑器的内容并calls the sudo command覆盖文件。

sudo chown -R myuser /path/to/folder

这对我来说效果很好!

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

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

sudo chown -R ubuntu /etc/prometheus/prometheus.yml 

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

为当前用户启用编辑 /etc/nginxroot,在 ~/.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有很多options--map 可能不是最好的。到目前为止,它一直在我的测试中工作。

一切似乎都如您所愿。让您以 root 的身份“探索”,任何修改都将如同您拥有 root 的权限一样进行。只是不要忘记安全隐患!