用VScode常常会碰到以下情况,Could not establish connection。
先介绍一下VScode远程连接和终端SSH连接的区别:终端直接用SSH连接时,只需要开启SSH服务,并消耗少量的内存即可;VScode连接时,会自动在服务器或虚拟机的用户目录(也就是~/.vscode
)下安装相关插件,并且会启动一个vscode node,消耗的内存比终端直连要多一些。
我看网上查到的一些资料都蛮古老的,一篇说要配置Remote-SSH的config路径的的文章被转发了好多好多次,这个emm,在2023年,已经不需要配置了。遂写下现在可能会遇到的问题。
接下来,介绍一下我遇到过的所有原因,以及完整的排查思路,希望对你有所启发。
情形1:连接不上前,没有弹出过输入密码的框
注意:没有弹出要求输入密码的框,
说明VScode和服务器并没有成功地进行交互。
这个时候需要排查没有成功交互的原因。
-
首先要考虑的是网络原因。尝试在主机上ping虚拟机或服务器的ip地址,ip地址可以使用
ifconfig
或者ipconfig
指令查看。如果ping不通且使用的是虚拟机,转2;如果ping不通且使用的是服务器,转5;如果ping得通,转6;
-
主机和虚拟机不互通,多半是虚拟机网卡或防火墙有问题。如果虚拟机本身上不了网,请直接配置成NAT模式并通过这篇文章《Ubuntu虚拟机连不上网》解决上网问题再回来;如果可以上网,单纯是不互通,转3。
-
先排除是防火墙的原因,先关掉双方的防火墙。把虚拟机的防火墙直接关掉,自行搜索关闭xx系统防火墙的方式,Ubuntu的是
sudo ufw disable
;主机的防火墙一般不用管,但如果你怀疑是它的原因也可以关掉,Windows电脑的具体关闭方式就是搜索“防火墙和网络保护”,然后直接关。如果不是防火墙的原因,转4。 -
有个解决办法非常诡异,但确实百试百灵:尝试重启虚拟机的网卡。具体操作方式是搜索“网络连接”,如下图所示,禁用再启用虚拟机相关的网卡,过一分钟左右再次尝试ping。如果ping得通,转5;如果还是ping不通,可以考虑去找找windows的VMware相关的网络服务有没有启动,具体搜索“服务”,如果全都是对的但是还是ping不通,我就没办法了。
-
主机与服务器不互通,多半是主机网卡或者双方防火墙有问题。极端情况下,服务器可能禁用了ping端口,这种情况考虑尝试别的网络连接方式,因此转7。其他的常见情况,一是该服务器有访问范围的限制,所以需要连上公司或学校的VPN才能访问;二是主机上不了网,可能连百度都访问不了;三是主机防火墙禁用了对服务器网段的访问,或者服务器防火墙禁了主机,这时需要关闭主机或服务器的防火墙。检查完之后能ping通了就转6。
-
尝试在终端中ssh连接服务器或主机,
ssh [用户名]@[ip地址] -p [端口号,默认是22]
。连不上,转7;连得上,转8。
-
ssh连不上通常是没开ssh服务或者ssh相关端口被禁用或更改。ubuntu虚拟机或服务器开启ssh服务的方式是
sudo apt install openssh-server
、systemctl start ssh
。ssh端口被禁用请关闭防火墙,若更改请换个端口。
极端情况1:服务器或虚拟机没内存了,可以考虑重启服务器或者虚拟机。
极端情况2:ssh之前连接的时候,针对Are you sure you want to continue connecting (yes/no/[fingerprint])?
这个问题不小心选择了其他选项而不是yes,导致默认拒绝连接,此时可以去~/.ssh
文件夹下删除know_hosts
文件。
连得上之后转8。 -
到这里,应该是终端能够顺利使用ssh连接服务器或虚拟机了。此时你再去使用VScode连接服务器或虚拟机,就应该会发现起码能弹出输入密码的框了。如果可以,转情形2;如果还不可以,转9。
-
网络没问题了但还是交互不了,大概率是你的VScode的SSH连接配置文件写得有问题。一个简单的SSH连接配置文件示意如下图,应该包含Host、HostName、User,而Port默认是22,可加可不加。如果修正后可以弹出输入密码的框了,转情形2;如果还不可以,转10。
-
如果还弹不出来,还有一种极端情况——VScode新建连接时,有时会弹窗要选择服务器的系统类型,可选项有Linux、Windows和MacOS,这个选错了的话,即使网络环境最终被修好了,VScode也无法识别对面的服务器或者虚拟机是什么系统,从而导致连接失败。解决方法是左下角点开设置,搜索
remote platform
,把平台改对:
情形2:输入密码之后显示连接不上
注意:已经弹出要求输入密码的框,但还是没连上,
说明问题出在VScode应用程序在服务器或虚拟机上的行为上,
这个时候需要排查VScode究竟哪一步操作出现了问题。
- 检查密码是否输入错误,如果输入对了还是连不上,转2。
- 如果这是你首次连接或异地、异机器连接,转3;如果你以前连过这个服务器或虚拟机,是突然连不上的,转5。
- 检查是否是服务器或虚拟机存储空间满了。VScode连接后会安装相关插件,所以很可能是装到一半没存储空间了所以无法连接。如果真的满了,解决办法是先用终端先连上,腾出一部分空间;如果不是这个原因,转4。
- 检查服务器或虚拟机上是否存在你的用户目录,检查方式是
cd ~
看看有没有反应。VScode连接后会安装相关插件,安装的路径默认是~/.vscode
,但是有的系统它新安装的时候真没有自动创建用户目录~
,这时候就需要手动创建,并且要将这个文件夹的所有者用chown
设置成自己这个用户。如果不是这个原因,转5。 - 可能是距离上次连接的时间太长了或网络信号弱,自动断开了,点Retry重连就行。如果不行,我目前没有别的解决办法了,可以把报错在评论区发给我看一下。