如何使用非 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 身份连接的位置来解决这个问题。
按照说明设置您的 authorized_keys 文件,但以 root 身份而不是您的用户身份执行这些步骤:
https://code.visualstudio.com/docs/remote/troubleshooting#_configuring-key-based-authentication
编辑 (vi) 您的根 authorized_keys 文件,该文件应该有一个类似于
的条目
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/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
有很多options。 --map
可能不是最好的。到目前为止,它一直在我的测试中工作。
一切似乎都如您所愿。让您以 root
的身份“探索”,任何修改都将如同您拥有 root
的权限一样进行。只是不要忘记安全隐患!
我无法使用 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 身份连接的位置来解决这个问题。
按照说明设置您的 authorized_keys 文件,但以 root 身份而不是您的用户身份执行这些步骤: https://code.visualstudio.com/docs/remote/troubleshooting#_configuring-key-based-authentication
编辑 (vi) 您的根 authorized_keys 文件,该文件应该有一个类似于
的条目
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/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
有很多options。 --map
可能不是最好的。到目前为止,它一直在我的测试中工作。
一切似乎都如您所愿。让您以 root
的身份“探索”,任何修改都将如同您拥有 root
的权限一样进行。只是不要忘记安全隐患!