Azure上Fedora 40主机挂载外部磁盘时VS Code SSH远程安装失败原因
现象
- 用户x的/home目录位于系统盘时,VS Code SSH远程服务器可正常安装并使用
- 将/home挂载到Azure外部托管磁盘后,VS Code SSH远程服务器安装失败,日志显示权限拒绝
挂载配置(Ansible)
- name: Mount home dir ansible.posix.mount: path: /home src: /dev/disk/by-uuid/00fd83c8-54c2-xxx-xxx-a1d62d29418a fstype: xfs opts: noatime,defaults,noexec state: mounted
错误日志
Starting VS Code CLI... "/home/x/.vscode-server/code-dc96b837cf6bb4af9cd736aa3af08cf8279f7685" command-shell --cli-data-dir "/home/x/.vscode-server/cli" --on-port --parent-process-id 5064 &> "/home/x/.vscode-server/.cli.dc96b837cf6bb4af9cd736aa3af08cf8279f7685.log" < /dev/null
printenv:
[14:46:19.776] > SHELL=/bin/bash
HISTCONTROL=ignoredups
HOSTNAME=vm-xxx-devops-cappiedevbox-0-wht
EDITOR=/usr/bin/vim
PWD=/home/x
LOGNAME=x
XDG_SESSION_TYPE=tty
MOTD_SHOWN=pam
HOME=/home/x
LANG=en_US.UTF-8
VSCODE_AGENT_FOLDER=/home/x/.vscode-server
SSH_CONNECTION=xxxx 9769 10.0.2.4 22
XDG_SESSION_CLASS=user
SELINUX_ROLE_REQUESTED=
LESSOPEN=||/usr/bin/lesspipe.sh %s
USER=x
SELINUX_USE_CURRENT_RANGE=
SHLVL=2
XDG_SESSION_ID=11
XDG_RUNTIME_DIR=/run/user/2010
SSH_CLIENT=xxxx 9769 22
DEBUGINFOD_URLS=https://debuginfod.fedoraproject.org/
XDG_DATA_DIRS=/home/x/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
PATH=/home/x/.local/bin:/home/x/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
SELINUX_LEVEL_REQUESTED=
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/2010/bus
MAIL=/var/spool/mail/x
_=/usr/bin/printenv
[14:46:19.778] > Spawned remote CLI: 5082
[14:46:19.800] > Exec server process not found
[14:46:19.801] > main: line 321: /home/x/.vscode-server/code-dc96b837cf6bb4af9cd736aa3af08cf8279f7685: 权限拒绝
[14:46:19.804] > 0f332c591725: start
SSH_AUTH_SOCK====
DISPLAY====
listeningOn====
osReleaseIdfedora
archx86_64
vscodeArchx64
bitness64
tmpDir==/run/user/2010==
[14:46:19.804] > platformlinux
unpackResult====
didLocalDownload0
downloadTime====
installTime====
serverStartTime26
execServerTokenxxx-1111-1111-1a11-xxxx
0f332c591725: end
[14:46:19.804] 收到安装输出:
SSH_AUTH_SOCK====
DISPLAY====
listeningOn====
osReleaseIdfedora
archx86_64
vscodeArchx64
bitness64
tmpDir==/run/user/2010platformlinux==
unpackResult====
didLocalDownload0
downloadTime====
installTime====
serverStartTime26
execServerTokenxxx-x-xxx-xx-x
[14:46:19.804] 无法从服务器输出中解析远程端口
[14:46:19.804] 正在终止本地服务器
[14:46:19.805] ssh-remote+cdbj的执行服务器启动失败: 错误
[14:46:19.805] 打开ssh-remote+cdbj的执行服务器失败: 错误
[14:46:19.807] 本地服务器退出: 15
问题原因
挂载选项中的noexec是核心问题:该选项会禁止在挂载分区上执行任何二进制文件。VS Code远程服务器的二进制文件默认存放在用户home目录下的.vscode-server文件夹中,因此执行时触发权限拒绝。
解决办法
- 修改挂载配置:更新Ansible的挂载任务,移除
noexec选项,修改后的配置如下:
- name: Mount home dir ansible.posix.mount: path: /home src: /dev/disk/by-uuid/00fd83c8-54c2-xxx-xxx-a1d62d29418a fstype: xfs opts: noatime,defaults state: mounted
- 重新挂载分区:执行Ansible任务应用修改,或者手动执行以下命令:
umount /home mount /home - 重新连接VS Code SSH远程:删除本地VS Code中对应的远程连接缓存,重新发起远程连接,此时VS Code远程服务器应该能正常安装并运行。
内容的提问来源于stack exchange,提问作者Pompey Magnus

