在使用远程服务器(例如: 虚拟机)时,有时您需要切换到不同的用户,例如:短时间内获得更高的权限。 通常可以使用以下命令之一来完成:
代码语言:javascript复制$ su <different-user>
$ sudo -i -u <different-user>
但如果你想使用 VSCode
时更轻松地探索文件系统和编辑代码,这就不那么简单了。比如:登录用户为 mike
,而您想在 VSCode 资源管理器中访问 root
用户的主目录。
首先,您需要在 VSCode
配置中启用一些标志,你可以在用户界面 ( 用 ctrl ,
打开设置,搜索 Remote.SSH
) 中启用:
或 settings.json
中编辑:
"remote.SSH.useLocalServer": true,
"remote.SSH.enableRemoteCommand": true,
然后,打开 SSH
配置文件(默认为 /home/$USER/.ssh/config
),在主机中添加 RemoteCommand
和 RequestTTY
选项。
例如:
代码语言:javascript复制Host example.com
HostName example.com
IdentitiesOnly=yes
User my_user
RequestTTY yes
RemoteCommand sudo -i -u other_user
注:
RequestTTY
选项的作用是指定是否为会话请求伪 TTY。参数可以是:no(从不请求 TTY)、yes(当标准输入为 TTY 时始终请求 TTY)、force(始终请求 TTY)或 auto(打开登录会话时请求 TTY)。该选项与 -t 和 -T 标志相同。如果你不加上这个选项,通过 SSH 命令行登陆时将无法正常登陆。
如果远程服务器可以访问互联网,那就已经配置完成了。
否则,您需要采取以下两个步骤中的一个。
- 远程服务器可通过代理访问互联网
在这种情况下,请在需要切换用户的主目录下创建一个 .wgetrc
文件。例如: /home/other_user/.wgetrc
,内容如下:
use_proxy=on
http_proxy=http://proxy.host:<port>
https_proxy=http://proxy.host:<port>
这是必要的,因为 VSCode
会在会话开始时使用 wget
下载必要的二进制文件。
- 远程服务器根本无法访问互联网
在这种情况下,您需要在本地下载 VSCode
服务器文件,然后将其复制(例如: 使用 scp
)到服务器,具体步骤如下:
# 本地下载
$ commit_id=f1e16e1e6214d7c44d078b1f0607b2388f29d729
$ curl -sSL "https://update.code.visualstudio.com/commit:${commit_id}/server-linux-x64/stable" -o vscode-server-linux-x64.tar.gz
$ scp vscode-server-linux-x64.tar.gz user@remotehost:/home/user/
# 远程服务器操作
$ commit_id=f1e16e1e6214d7c44d078b1f0607b2388f29d729
$ mkdir -p ~/.vscode-server/bin/${commit_id}
$ tar zxvf ~/vscode-server-linux-x64.tar.gz -C ~/.vscode-server/bin/${commit_id} --strip 1
$ touch ~/.vscode-server/bin/${commit_id}/0
更详细步骤可参考:https://stackoverflow.com/a/57601121/8175198
或者,先用 VSCode
远程 SSH
连接正常用户,让它传输文件,然后将文件复制到另一个用户的主目录。
$ cp -r /home/mike/.vscode-server/ /root/
您还可以将默认设为在客户端上下载 VSCode 服务器文件,并使用 scp
将其传输到主机,而不是先尝试 wget
将其下载到主机上。
您也可以更改这些文件的安装位置
参考文档:
- https://medium.com/@krisztian.sala/vs-code-remote-ssh-as-another-user-57d449e20fb1
- https://stackoverflow.com/a/57601121/8175198
- https://github.com/b01/dl-vscode-server