使用 VSCode 远程连接的 SSH 权限问题及解决方案
在使用 VSCode 远程 SSH 连接时,可能会遇到文件权限问题导致连接失败的情况。本文将详细记录如何为 SSH 配置文件(config
)和私钥文件(id_rsa
)正确设置权限,从而解决 VSCode 远程连接和 SSH 无法免密登录的问题。
问题背景
在 VSCode 中通过 SSH 连接远程服务器时,遇到了以下两个主要问题:
SSH 配置文件(
config
)权限问题:VSCode 提示Everyone
用户组对config
文件的权限过高,要求只保留读取权限。报错信息:
[13:14:14.179] Log Level: 2
[13:14:14.192] Remote-SSH version: remote-ssh@0.111.2024040515
[13:14:14.193] win32 x64
[13:14:14.194] SSH Resolver called for host: guiyun
[13:14:14.194] Setting up SSH remote "guiyun"
[13:14:14.197] Using commit id "d994aede3529f4d1af9eeaeb234d32fd936243e7" and quality "insider" for server
[13:14:14.199] Install and start server if needed
[13:14:15.556] Got error from ssh: spawn C:\WINDOWS\System32\WindowsPowerShell\v1.0\ssh.exe ENOENT
[13:14:15.556] Checking ssh with "C:\WINDOWS\System32\OpenSSH\ssh.exe -V"
[13:14:15.596] > OpenSSH_for_Windows_9.5p1, LibreSSL 3.8.2
[13:14:15.599] Running script with connection command: "C:\WINDOWS\System32\OpenSSH\ssh.exe" -T -D 5902 guiyun bash
[13:14:15.601] Terminal shell path: C:\WINDOWS\System32\cmd.exe
[13:14:15.845] > Bad permissions. Try removing permissions for user: \\Everyone (S-1-1-0) on file C:/Users/Administrator/.ssh/config.
> Bad owner or permissions on C:\\Users\\Administrator/.ssh/config
> 过程试图写入的管道不存在。
> ]0;C:\WINDOWS\System32\cmd.exe
[13:14:15.845] Got some output, clearing connection timeout
[13:14:17.122] "install" terminal command done
[13:14:17.122] Install terminal quit with output: ]0;C:\WINDOWS\System32\cmd.exe
[13:14:17.122] Received install output: ]0;C:\WINDOWS\System32\cmd.exe
[13:14:17.123] Failed to parse remote port from server output
[13:14:17.124] Resolver error: Error:
at g.Create (c:\Users\Administrator\.vscode-insiders\extensions\ms-vscode-remote.remote-ssh-0.111.2024040515\out\extension.js:2:499181)
at t.handleInstallOutput (c:\Users\Administrator\.vscode-insiders\extensions\ms-vscode-remote.remote-ssh-0.111.2024040515\out\extension.js:2:496503)
at t.tryInstall (c:\Users\Administrator\.vscode-insiders\extensions\ms-vscode-remote.remote-ssh-0.111.2024040515\out\extension.js:2:620043)
at async c:\Users\Administrator\.vscode-insiders\extensions\ms-vscode-remote.remote-ssh-0.111.2024040515\out\extension.js:2:579901
at async t.withShowDetailsEvent (c:\Users\Administrator\.vscode-insiders\extensions\ms-vscode-remote.remote-ssh-0.111.2024040515\out\extension.js:2:583207)
at async k (c:\Users\Administrator\.vscode-insiders\extensions\ms-vscode-remote.remote-ssh-0.111.2024040515\out\extension.js:2:576866)
at async t.resolve (c:\Users\Administrator\.vscode-insiders\extensions\ms-vscode-remote.remote-ssh-0.111.2024040515\out\extension.js:2:580578)
at async c:\Users\Administrator\.vscode-insiders\extensions\ms-vscode-remote.remote-ssh-0.111.2024040515\out\extension.js:2:846696
[13:14:17.126] ------
私钥文件(
id_rsa
)无法免密码登录:SSH 提示id_rsa
私钥文件权限不安全,导致无法免密码登录。报错信息:
PowerShell 7.4.5
PS C:\Users\Administrator> ssh root@103.110.228.78 -p 22
Bad permissions. Try removing permissions for user: \\Everyone (S-1-1-0) on file C:/Users/Administrator/.ssh/id_rsa.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'C:\\Users\\Administrator/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "C:\\Users\\Administrator/.ssh/id_rsa": bad permissions
root@103.110.228.78's password:
本文将介绍如何一步步解决这两个问题,以便顺利使用 VSCode 进行远程 SSH 连接。
1. 为 SSH 配置文件 config
设置权限
VSCode 要求 config
文件的权限必须为只读权限,并且只限于当前用户和 Everyone
用户组读取。如果权限设置不当,VSCode 将无法正常使用远程 SSH 功能。
步骤 1:检查当前权限
首先,检查 config
文件的当前权限设置。打开 PowerShell,并运行以下命令:
icacls "C:\Users\Administrator\.ssh\config"
检查输出中是否包含 Everyone
用户组的权限,特别关注是否有写权限(如 (W)
)。如果 Everyone
拥有写权限,这可能会导致 VSCode SSH 连接失败。
步骤 2:设置 Everyone
只读权限
VSCode 要求 config
文件的 Everyone
用户组只能拥有读取权限。
确保移除 Everyone
的写权限:如果 Everyone
拥有写权限,我们需要确保完全移除它。执行以下命令来移除 Everyone
的写权限:
icacls "C:\Users\Administrator\.ssh\config" /remove "Everyone"
禁用权限继承:为了确保文件不会从父目录中继承不必要的权限,我们需要禁用权限继承:
icacls "C:\Users\Administrator\.ssh\config" /inheritance:r
这将禁用继承的权限,确保 config
文件只使用当前手动设置的权限。
为此,你可以通过以下命令赋予 Everyone
只读权限:
icacls "C:\Users\Administrator\.ssh\config" /grant "Everyone:R"
步骤 3:验证权限
执行完上述操作后,验证权限设置是否正确。运行以下命令:
icacls "C:\Users\Administrator\.ssh\config"
应该看到类似 Everyone:(R)
的输出,表示 Everyone
用户组只拥有读取权限,没有写权限。这意味着文件的权限配置符合 VSCode SSH 连接的要求。通过这些步骤,你可以确保 config
文件的权限正确配置,从而解决 VSCode 远程 SSH 连接的权限问题。
步骤 4:验证远程连接命令
在完成文件权限的调整后,你可以通过 SSH 命令验证远程连接是否正常工作。确保你已经正确设置了 config
文件的权限并且已完成所有权限修复步骤。
1. 在终端或 PowerShell 中运行以下命令:
ssh root@your.ip.exam.ple -p 22
root
:你希望使用的远程服务器的用户名。your.ip.exam.ple
:你要连接的服务器的 IP 地址。-p 22
:连接使用的端口号,默认是22
,可以根据需要调整。
2. 连接成功的情况:
如果配置正确,你将看到连接提示,可能会询问你是否接受远程服务器的指纹信息,像这样:
The authenticity of host 'your.ip.exam.ple (your.ip.exam.ple)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes
输入 yes
后,你将被要求输入密码或使用 SSH 密钥进行免密登录。
3. 连接失败的情况:
如果仍然无法连接,请检查:
config
文件中的 IP、端口、用户名是否正确。- 私钥文件(如
id_rsa
)的权限是否设置正确,确保只有文件所有者可以访问。 - 远程服务器的防火墙或 SSH 服务是否配置正确。
完成后,你应该能够成功通过 SSH 命令连接到远程服务器,并验证 VSCode 的 SSH 远程连接功能是否正常。
2. 解决 SSH 私钥 id_rsa
文件权限过高问题
在配置 SSH 密钥免密码登录时,SSH 需要确保私钥文件的权限非常严格,只有文件所有者能访问。如果权限过于宽松(如 Everyone
也有权限),SSH 将拒绝使用该私钥。
步骤 1:禁用继承权限
首先,我们需要禁用私钥文件的继承权限,这样文件不会从上层目录继承不必要的权限。
icacls "C:\Users\Administrator\.ssh\id_rsa" /inheritance:r
步骤 2:移除 Everyone
的权限
确保 Everyone
不再拥有对私钥文件的任何权限:
icacls "C:\Users\Administrator\.ssh\id_rsa" /remove "Everyone"
步骤 3:为 Administrator
设置读取权限
设置私钥文件的权限,让 Administrator
只拥有读取权限:
icacls "C:\Users\Administrator\.ssh\id_rsa" //grant:r "Administrator:(R)"
步骤 4:验证权限
再次验证权限,确保 Everyone
已被移除,且只有 Administrator
拥有读取权限:
icacls "C:\Users\Administrator\.ssh\id_rsa"
输出应显示类似于:
C:\Users\Administrator\.ssh\id_rsa DANCIPC\Administrator:(R)
步骤 5:验证远程连接命令
在完成文件权限的调整后,你可以通过 SSH 命令验证远程连接是否正常工作。确保你已经正确设置了 config
文件的权限并且已完成所有权限修复步骤。
1. 在终端或 PowerShell 中运行以下命令:
ssh root@your.ip.exam.ple -p 22
root
:你希望使用的远程服务器的用户名。your.ip.exam.ple
:你要连接的服务器的 IP 地址。-p 22
:连接使用的端口号,默认是22
,可以根据需要调整。
2. 连接成功的情况:
如果配置正确,你将看到连接提示,可能会询问你是否接受远程服务器的指纹信息,像这样:
The authenticity of host 'your.ip.exam.ple (your.ip.exam.ple)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes
输入 yes
后,你将被要求输入密码或使用 SSH 密钥进行免密登录。
3. 连接失败的情况:
如果仍然无法连接,请检查:
config
文件中的 IP、端口、用户名是否正确。- 私钥文件(如
id_rsa
)的权限是否设置正确,确保只有文件所有者可以访问。 - 远程服务器的防火墙或 SSH 服务是否配置正确。
完成后,你应该能够成功通过 SSH 命令连接到远程服务器,并验证 VSCode 的 SSH 远程连接功能是否正常。
3. 解决 VSCode 远程连接问题总结
在配置 SSH 时,正确的文件权限设置至关重要。VSCode 远程连接要求 SSH 配置文件 config
允许 Everyone
用户组读取权限,而 SSH 私钥文件 id_rsa
必须严格禁止 Everyone
访问。
- SSH 配置文件(
config
):保留Everyone
的读取权限,移除写权限。 - SSH 私钥文件(
id_rsa
):移除所有用户组的权限,只保留当前用户的读取权限。
通过调整这些权限,VSCode 将能够顺利通过 SSH 进行远程连接,同时 SSH 也能够安全地使用私钥进行免密码登录。
如果你在使用 VSCode 远程 SSH 时遇到类似问题,希望本文的解决方案能够帮助你解决权限相关的错误,提升工作效率。
参考命令列表
检查文件权限:
icacls "C:\Users\Administrator\.ssh\config"
为
Everyone
设置只读权限:icacls "C:\Users\Administrator\.ssh\config" /grant "Everyone:(R)"
禁用继承权限:
icacls "C:\Users\Administrator\.ssh\id_rsa" /inheritance:r
移除
Everyone
权限:icacls "C:\Users\Administrator\.ssh\id_rsa" /remove "Everyone"
为
Administrator
设置读取权限:icacls "C:\Users\Administrator\.ssh\id_rsa" /grant:r "Administrator:(R)"
验证远程连接命令
ssh root@your.ip.exam.ple -p 22
希望这篇博客能够帮助你顺利解决 VSCode SSH 连接权限问题并启用 SSH 密钥免密码登录功能。
使用 VSCode 远程连接的 SSH 权限问题及解决方案的更多相关文章
- vscode远程连接服务器出现Bad owner or permissions on .ssh/config
vscode远程连接服务器出现Bad owner or permissions on C:\\Users\USER\.ssh/config 过程试图写入的管道不存在, 原因是vscode的remoto ...
- vscode远程连接linux服务器,可视化绘图
vscode远程连接linux服务器 想要实现的功能和解决方案 实现的功能: windows下直接使用远程linux服务器的python环境和文件来编写和运行py文件, 实时的编写py文件,和可视化绘 ...
- VScode远程连接服务器
VScode远程连接服务器 1.远程服务器安装rmate,在远程服务器上执行以下操作 wget https://raw.githubusercontent.com/sclukey/rmate-pyth ...
- 错误代码是1130,ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server 是无法给远程连接的用户权限问题
错误代码是1130,ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server 是无法给远程连接的用 ...
- 阿里云服务器的MySQL连接和vscode远程连接
目录 一.前言 二.使用Navicat等软件连接MySQL 1. 修改服务器系统密码 2. 防火墙选项添加MySQL 3. 使用Navicat连接 三.使用vscode连接服务器 一.前言 双十一的时 ...
- 项目day1 -- vscode远程连接云服务器
刚学完go的语法,本来想着找个小项目试试手,发现大佬们都是vscode ssh到云服务器上做开发的.正好看到阿里云的学生认证后可以白嫖,就先嫖了个试试手 跟着各大教程简单配置了一下阿里云,安装vsco ...
- 搭建集群必备:windows如何使用Xshell远程连接(SSH)Linux
出处about云(http://www.aboutyun.com/blog-61-22.html)欢迎访问我的博客 首先介绍一下环境: (主机)操作系统:win7 虚拟机:vmware worksta ...
- VSCode远程连接Docker
一.Docker开启远程访问 [root@local host ~]# vi /lib/systemd/system/docker.service #修改ExecStart这行 ExecStart=/ ...
- vscode 远程连接 linux 远程开发
1. 安装拓展 remote-ssh 2. 设置云主机 git 控制台使用命令 ssh-keygen # 生成一个 ssh key # 登录远程主机 # ssh ubuntu@123.123.123. ...
- mysql远程连接缓及缺少*.dll文件解决方案
1.mysql远程连接缓慢 # For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5. ...
随机推荐
- vscode配置docker插件
参考: https://zhuanlan.zhihu.com/p/530413695 ================================================ 本文不对vsco ...
- vant 爬坑 (一)
vant 通过脚手架安装: # 安装 Vue Cli npm install -g @vue/cli # 创建一个项目 vue create hello-world # 创建完成后,可以通过命令打开图 ...
- 记一次 .NET某智慧出行系统 CPU爆高分析
一:背景 1. 讲故事 前些天有位朋友找到我,说他们的系统出现了CPU 100%的情况,让你帮忙看一下怎么回事?dump也拿到了,本想着这种情况让他多抓几个,既然有了就拿现有的分析吧. 二:WinDb ...
- Codeforces Round 964 (Div. 4)
Codeforces Round 964 (Div. 4) A送分 B 大意:两个人两张牌 随机翻 求a翻出来的牌比b大的可能 #include <cstdio> #include < ...
- 通过JUnit源码分析学习编程的奇技淫巧
打开 Maven仓库,左边选项栏排在第一的就是测试框架与工具,今天的文章,V 哥要来聊一聊程序员必备的测试框架JUnit 的源码实现,整理的学习笔记,分享给大家. 有人说,不就一个测试框架嘛,有必要去 ...
- 暑假Java自学进度总结06
一.今日所学: 1.for循环 for(初始化语句;条件判断语句;条件控制语句){ 循环体语句; } 执行流程: 1>执行初始化语句 2>执行条件判断语句,若为true则执行循环体语句,若 ...
- 23. 基于Cortex-A9 uboot代码启动分析
本篇文章是彭老师第一次在B站直播间,边直播边记录笔记,视频已经上传到B站. 现在完善整理成该篇文章,有想学习uboot启动的代码详细流程的老铁可以进入我B站空间配合视频一起学习. [视频地址] B站用 ...
- Mac版Sublime Text 4152 激活
Sublime Text下载地址:Download - Sublime Text 破解工具"Hex Fiend"下载地址:Hex Fiend, a fast and clever ...
- .NET 开源实时监控系统 - WatchDog
前言 在平时的开发中随着我们系统应用不断地迭代变的复杂,对应用的实时监控变得越来越重要.实时监控不仅可以帮助我们快速定位问题,还能在出现问题时及时采取措施,减少业务中断的时间. 本文将介绍一个名为Wa ...
- containerd:配置https私有镜像仓库的最新方法
随着containerd应用越来越广泛,我们必须紧跟官网的节奏. 之前配置https私有镜像仓库的方法比较繁琐,并且不易梳理,下边介绍一下目前最新的配置方法. 配置https私有镜像仓库 我假设你现在 ...