vscode使用ssh远程连接失败(及其他问题合集)
Posted 吨吨不打野
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vscode使用ssh远程连接失败(及其他问题合集)相关的知识,希望对你有一定的参考价值。
文章目录
- 1. 常见错误和解决方案
- 2. 自己看日志找适合自己的解决方案
- ✅ 8. 解决
- 3. 彻底卸载vscode
- 4. vscode报错
- 5. Failed to set up socket for dynamic port forward to remote port
- 6. 与终端pty主机进程的连接没有响应,终端可能停止工作(重启pty主机)
- 7. 其它问题
1. 常见错误和解决方案
去查看自己的错误,
- 在vscode界面,帮助 -> 切换开发人员工具
- 如果是windows系统,直接快捷键
ctrl+shift+I
打开开发者工具。
1.1 ERR Request 7 timed out (15000ms)
ERR Error: Time limit reached
,超时错误,15000ms是个参数,可以设置响应等待时间,默认是15s,可以改为其他时间
参考 Stack Overflow:why ssh connection timed out in vscode?
- 文件-> 首选项->设置
- 在
常用设置
中,找到扩展
->Remote-SSH
- 把15s改成更长的时间
另外,也有方法是修改一个配置文件。
依旧是在设置中,搜索ssh
,找到 在setting.json
中编辑
在这个文件夹中加入:"remote.SSH.useLocalServer": false,
,编辑后文件类似下面这样:
"security.workspace.trust.untrustedFiles": "open",
"remote.SSH.useLocalServer": false,
"remote.SSH.remotePlatform":
"10.71.10.49": "linux",
"10.70.21.10": "linux"
,
"workbench.colorTheme": "Quiet Light",
"workbench.iconTheme": "office-material-icon-theme",
"terminal.integrated.windowsEnableConpty": false,
如果没什么用的话,说明可能本地和远程服务器之间网可能确实不太好,大部分情况下重连几次就好了
1.2 ERR Error: WebSocket close with status code 1006
在开发者工具里信息如下:
其实在输出->remote ssh中,也会有一些有用的信息,
错误信息为:
Failed to set up socket for dynamic port forward to remote port XXX: Proxy connection timed out. Is the remote port correct?
大概意思是代理超时了。。(应该是vpn有问题?但是mobaxterm连接依然非常顺利)
参考Github:Vscode-issue
一些人选择降级,但是2021年是1.52版本,现在已经1.66了,而且这个问题已经关闭了,应该新版本已经解决了
参考
2. 自己看日志找适合自己的解决方案
2.1 确认错误
感谢Github上的issue:Keeps reconnect and reload when Remote SSH with VPN #2565,启发我去看自己的输出信息,确定远程log文件的位置。
使用xshell或者mobaxterm等远程连接工具,去查看上面这个日志文件,例如:
vim /home/user/.vscode-server/.dfd34e8260c270da74b5c2d86d61aee4b6d56977.log
找到其中的报错信息,例如我的是
[15:13:51] [Error: Could not find pty on pty host,
at C._throwIfNoPty (/home/user/.vscode-server/bin/dfd34e8260c270da74b5c2d86d61aee4b6d56977/out/vs/platform/terminal/node/ptyHostMain.js:20:5336),
at C.updateTitle (/home/user/.vscode-server/bin/dfd34e8260c270da74b5c2d86d61aee4b6d56977/out/vs/platform/terminal/node/ptyHostMain.js:20:1676),
at Object.call (/home/user/.vscode-server/bin/dfd34e8260c270da74b5c2d86d61aee4b6d56977/out/vs/platform/terminal/node/ptyHostMain.js:13:8332),
at E.onPromise (/home/user/.vscode-server/bin/dfd34e8260c270da74b5c2d86d61aee4b6d56977/out/vs/platform/terminal/node/ptyHostMain.js:12:4867),
at E.onRawMessage (/home/user/.vscode-server/bin/dfd34e8260c270da74b5c2d86d61aee4b6d56977/out/vs/platform/terminal/node/ptyHostMain.js:12:4262),
at /home/user/.vscode-server/bin/dfd34e8260c270da74b5c2d86d61aee4b6d56977/out/vs/platform/terminal/node/ptyHostMain.js:12:3554,
at L.invoke (/home/user/.vscode-server/bin/dfd34e8260c270da74b5c2d86d61aee4b6d56977/out/vs/platform/terminal/node/ptyHostMain.js:8:145),
at l.fire (/home/user/.vscode-server/bin/dfd34e8260c270da74b5c2d86d61aee4b6d56977/out/vs/platform/terminal/node/ptyHostMain.js:8:1856),
at process.U (/home/user/.vscode-server/bin/dfd34e8260c270da74b5c2d86d61aee4b6d56977/out/vs/platform/terminal/node/ptyHostMain.js:6:34661),
at process.emit (node:events:390:28),
at emit (node:internal/child_process:917:12),
at processTicksAndRejections (node:internal/process/task_queues:84:21)]
2.2 搜索解决(需要等待官方debug)
进一步搜索vscode remote Error: Could not find pty on pty host,
,根据Github的issue:Could not find pty on pty host #144548。
- 一模一样的报错信息(自动测试机器人发现的。。)
- 2022.3.7才分配的错误
- 报错代码位于这里
- 修复时间从3月推迟到了4月
- 等吧
✅ 8. 解决
最大的收获,
- https://code.visualstudio.com/docs/remote/troubleshooting#_configuring-key-based-authentication
- https://code.visualstudio.com/docs/remote/ssh
- 这两个文档里详细介绍了一些ssh连接可能出现的问题和解决方案
1. 更新vscode版本
前几天vscode更新了,目前版本是1.67.0
帮助
->关于
2. 配置ssh密钥
8.2.1 想法来源
灵感来源于我在寻找替代方案时,看到VScode远程调试C++工程含X11(局域网)中配置ssh密钥,就可以省去输入密码。
想起来vscode之前一直断连,一直让输入密码,那直接配密钥就可以避开这一环节。
8.2.2 具体操作
生成密钥
- 在windows命令行里输入
ssh-keygen
,然后会有一些提示,直接三个回车。 - 在
C:\\Users\\yourname\\.ssh
文件夹中可以看到刚刚生成的密钥id_rsa.pub
和私钥id_rsa
公钥复制到服务器中
- 将公钥复制到
~/.ssh/authorized_keys
文件中
测试是否配置成功
- 直接在命令行里输入
ssh username@XXX.XXX.XXX
- 看是否不需要密码可以直接连接
以上内容完成后,就去vscode进行远程连接,一般都会成功
我的到这里其实有个小插曲
- 由于公司电脑会自动加密,我在将公钥复制到服务器的过程中,不小心把公钥文件做了编辑,因此文件被加密了
- 在vscode的
Remote-SSH
输出面板中,当时出现了C:\\Users\\yourname\\.ssh\\id_rsa invalid format
这样的提示。 - 重新生成密钥公钥,复制的时候小心不进行编辑,才成功的
3. 👍 更换默认的ssh工具
报错
close - IO is still pending on closed socket. read:0, write:1, io:0000019BC2EE60
更换OpenSSH为gitSSH
在vscode的设置中搜索remote.SSH.path
,在弹出的输入框中输入自己git的ssh的路径,例如:D:\\software\\Git\\usr\\bin\\ssh.exe
设置好之后再去进行远程连接,输出信息中会有类似
[22:59:38.015] Install and start server if needed
[22:59:38.018] Checking ssh with "D:\\software\\Git\\usr\\bin\\ssh.exe -V"
[22:59:38.736] > OpenSSH_8.8p1, OpenSSL 1.1.1m 14 Dec 2021
[22:59:38.748] Running script with connection command: "D:\\software\\Git\\usr\\bin\\ssh.exe"
即现在已经使用git的ssh在进行远程连接了
参考:
- ✅How can I use Windows’ built-in OpenSSH ssh-agent in VS Code, instead of Git bash’s?
- vscode-remote的Github issue:Can’t connect to Ubuntu: unreachable or not Linux x86_64 - IO is still pending on closed socket #51
- 环境配置–关于vscode-ssh远程连接下openssh与git自带的ssh的冲突解决方法
其它:一般有两种解决方案,
- 一种是修改vscode的Remote-SSH插件的代码,对ssh加入
-t
参数,但是在我看到的Remote-SSH输出信息中,"C:\\Users\\huangs2\\AppData\\Local\\Temp\\vscode-linux-multi-line-command-XXXX-XXX.sh" | ssh -T -L 127.0.0.1:57124:127.0.0.1:33173 "XXX" bash
,已经加入-T
参数了,应该是这个问题已经被修复了,故不予考虑 - 另一种方案是使用gitssh来代替默认的openssh,下面着重叙述这个方案
查看自己当前系统的SSH版本
- 使用vscode进行远程连接时,其实会打印出这个信息,类似
OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
- 其实可以直接在命令行里输入
ssh -V
,也会得到OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
- 根据PowerShell/Win32-OpenSSH的Github issue: close - IO is still pending on closed socket. read:1, write:0, io:0000023DE45AF900 #1899
- 这个问题可能与当前系统的openssh版本有关。
- 一开始想着如果报错就重启OpenSSH,但是似乎没有输入命令的地方。。
参考:VSCode远程连接配置。虽然这个网站看起来不怎么行,但是上面这个文章真的很好,虽然找不到收录的来源。
以下是这篇文章的一部分内容摘录
VSCode远程连接到开发机,调试Python或C++程序时,通过配置本地ssh,理论上每次在VSCode中连接远程机器,输入密码后即可连接。
首先需要确保VSCode中安装了Remote SSH插件。
考虑两种情况:
-
连接不上,或者经常掉线
-
不想每次输入密码
对于问题1,考虑安装git-for-windows,并添加Git安装目录usrin到系统PATH环境变量,并重开VSCode以生效(使用git安装后带的ssh.exe替代Win10自带ssh.exe)
对于问题2,考虑配置ssh-key。按照VSCode官方文档:https://code.visualstudio.com/docs/remote/troubleshooting#_configuring-key-based-authentication
由于上述VSCode文档中的操作,是在本机的powershelll/terminal里操作的, 实际中可能执行会出错,例如提示:
close - IO is still pending on closed socket. read:1, write:0, io:0000001B883956190
4. OpenSSH与gitSSH
参考:让 git 使用 Windows 10 OpenSSH
另外,也可以参考:
- ✅Using the OpenSSH client included in Windows 10 (1809) as your Git’s SSH client
- 以及Git on Windows: Force use of OpenSSH [closed]
3. 彻底卸载vscode
其实就是两步:
- 软件本身的卸载
- 一些缓存文件(配置、插件等的卸载)
第一步: 软件本身的卸载,找到安装目录,点击unis000.exe
第二步:找到C:\\Users\\yourname\\AppData\\Roaming
中的Code
文件夹,删除。(如果没有找到AppData
,在查看
中勾选隐藏的项目
)
第三步:找到C:\\Users\\yourname
文件夹,删除其中的.vscode
文件夹
参考:
- 💨 How to uninstall VS Code completely?
- How to cleanly / completely re-install VS Code on Mac
- How to reinstall VSCode without losing extensions and user settings
- Uninstall Visual Studio Code
4. vscode报错
窗口已崩溃(原因:“crashed”,代码:“-1073741819”)
网上常见的解决方式有两种:
- 设置成兼容模式
- 加大给的内存
根据Github issue:The window has crashed (reason: ‘crashed’, code: ‘-1073741819’) #132945,其实可以通过某个命令打开错误记录,来查看更详细的错误信息。
根据文档:Creating and symbolicating local crash reports
1. 关闭vscode
2. 在命令行输入`code --crash-reporter-directory <absolute-path>`,注意是绝对路径,这个路径是用于存放后续生成的故障转储文件(vscode在安装时默认添加到了path,所以可以执行)
例如:`code --crash-reporter-directory D:\\package\\vscode_dump`
3. 然后这个命令会自动打开vscode,你需要复现自己的错误
7. 然后去看这个文件夹下的`.dmp`文件记录
参考:
- CSDN博客:解决 vscode运行项目卡死 提示:窗口已崩溃(原因oom)
- Github issue:The window has crashed (reason: ‘crashed’, code: ‘-1073741819’) #132945
- CSDN:解决 vscode 窗口故障
- CSDN:关于Visual Studo Code其中The window has crashed(宽口出现故障)问题!!!
5. Failed to set up socket for dynamic port forward to remote port
网上有很多解决方案,都试了一遍,对我的问题有效的我放在前面,无效的丢在后面了
5.3 改服务器中ssh的配置 ❌
参考VSCode Remote SSH Connection Failed和VSCode连接Linux服务器出错
注意,不要在容器里改,在服务器里改
# vi /etc/ssh/sshd_config
"大概会看到以下内容"
# override default of no subsystems
Subsystem sftp /usr/lib/openssh/sftp-server
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
AllowTcpForwarding yes
"将AllowTcpForwarding 前的注释去掉,同时no改为yes"
"然后重启服务"
systemctl restart sshd
改了之后,短暂的连接正常
5.2 删除服务器端的.vs-code
❌
连接远程过程中,其实可以看到输出信息中,包含以下内容
切换到这个文件夹,删除你自己这个连接对应的文件夹,即上面的bin/dfd34e8260c270da74b
文件夹,
# 打开会发现这里有很多其他连接的文件,删除自己的就行
/home/user/.vscode-server/bin> ls
6cba118ac49a1b88332f312a8f67186f7f3c1643 8908a9ca0f221f36507231afb39d2d8d1e182702 dfd34e8260c270da74b5c2d86d61aee4b6d56977
7f6ab5485bbc008386c4386d08766667e155244e c722ca6c7eed3d7987c0d5c3df5c45f6b15e77d1
再次连接,会发现一个同名文件会被创建,还是名为dfd34e8260c270da74b5c2d86
。
5.1 改本地配置文件 ❌
根据【Vscode Remote】无法连接:Failed to set up socket for dynamic port forward to remote port
ctrl+shift+P
,输入Remote-SSH:Settings
,或者找到设置中用户
->扩展
->Remote-SSH
。- 把
Remote.SSH:Enable Agent Forwarding
的勾选去掉
6. 与终端pty主机进程的连接没有响应,终端可能停止工作(重启pty主机)
和最开始2. 自己看日志找适合自己的解决方案中报错的问题类似,都是和pty
主机有关系。
报错:与终端pty主机进程的连接没有响应,终端可能停止工作(重启pty主机)
对应的英语是:The connection to the terminal’s pty host process is unresponsive, the terminals may stop working.
虽然有些github上的issue显示这个问题已经被修复了,但是感谢Connection to terminal’s pty host process is becoming unresponsive #130320
文件->首选项->设置,搜索Windows Enable Conpty
,将勾选去掉即可
参考
- Github Issue:Terminal pty, not responding #148307
- Github Issue:The connection to the terminal’s pty host process is unresponsive, the terminals may stop working. #118159
7. 其它问题
7.1 终端进程"C:\\Windows\\System32\\cmd.exe"启动失败(退出代码:-1)
真的是令人无语的问题,根据Exit codes可知:
终端启动失败时提示的退出代码时来自于shell,而不是由VS code生成的。VS code支持很多类型的shell,因此也会有很多种可能的退出代码。
因此在解决问题的时候,需要搜索shell及对应的退出代码。例如:PowerShell 4294901760
,或者是cmd 1
等。
操作1
参考2021-11-25终端进程“C:\\Windows\\System32\\cmd.exe”已终止,退出代码: 3221225786。
可以将所有终端的使用旧版控制台
选项都去掉,包括powershell
,cmd
,Anaconda Prompt
以及Anaconda Powershell Prompt
没啥用。
操作2
其认为错误原因是:
由于vscode安装目录的文件名中有空格存在,将其改为其他字符或删除空格
我也确实有这个问题,重新安装之后,报另一个错误。
无效
7.2 已安装配置的调试类型’python’,但在此环境中不受支持
已安装配置的调试类型’python’,但在此环境中不受支持
以上是关于vscode使用ssh远程连接失败(及其他问题合集)的主要内容,如果未能解决你的问题,请参考以下文章