vscode使用ssh远程连接失败(及其他问题合集)

Posted 吨吨不打野

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vscode使用ssh远程连接失败(及其他问题合集)相关的知识,希望对你有一定的参考价值。

文章目录

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. 解决

最大的收获,

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在进行远程连接了


参考:


其它:一般有两种解决方案,

  • 一种是修改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. 连接不上,或者经常掉线

  2. 不想每次输入密码

对于问题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

另外,也可以参考:

3. 彻底卸载vscode

其实就是两步:

  1. 软件本身的卸载
  2. 一些缓存文件(配置、插件等的卸载)

第一步: 软件本身的卸载,找到安装目录,点击unis000.exe

第二步:找到C:\\Users\\yourname\\AppData\\Roaming中的Code文件夹,删除。(如果没有找到AppData,在查看中勾选隐藏的项目

第三步:找到C:\\Users\\yourname文件夹,删除其中的.vscode文件夹

参考:

4. vscode报错

窗口已崩溃(原因:“crashed”,代码:“-1073741819”)

网上常见的解决方式有两种:

  1. 设置成兼容模式
  2. 加大给的内存

根据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`文件记录

参考:

5. Failed to set up socket for dynamic port forward to remote port

网上有很多解决方案,都试了一遍,对我的问题有效的我放在前面,无效的丢在后面了

5.3 改服务器中ssh的配置 ❌

参考VSCode Remote SSH Connection FailedVSCode连接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,将勾选去掉即可

参考

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。

可以将所有终端的使用旧版控制台选项都去掉,包括powershellcmd,Anaconda Prompt以及Anaconda Powershell Prompt

没啥用。


操作2

参考关于vscode出现终端进程终止,退出代码:1的情况

其认为错误原因是:
由于vscode安装目录的文件名中有空格存在,将其改为其他字符或删除空格
我也确实有这个问题,重新安装之后,报另一个错误。

无效


7.2 已安装配置的调试类型’python’,但在此环境中不受支持

已安装配置的调试类型’python’,但在此环境中不受支持

以上是关于vscode使用ssh远程连接失败(及其他问题合集)的主要内容,如果未能解决你的问题,请参考以下文章

VSCode 远程 SSH 连接失败

vscode使用ssh连接Linux机器的问题

vscode更新后ssh远程连接不上问题解决

vscode更新后ssh远程连接不上问题解决

vscode更新后ssh远程连接不上问题解决

使用VSCode的Remote-SSH连接Linux进行远程开发