【经验】VScode 远程 SSH 连接 Ubuntu 或 TrueNas 出错,Could not establish connection

15 篇文章 2 订阅

用VScode常常会碰到以下情况,Could not establish connection。

在这里插入图片描述

先介绍一下VScode远程连接和终端SSH连接的区别:终端直接用SSH连接时,只需要开启SSH服务,并消耗少量的内存即可;VScode连接时,会自动在服务器或虚拟机的用户目录(也就是~/.vscode-server)下安装相关插件,并且会启动一个vscode node,消耗的内存比终端直连要多一些。

我看网上查到的一些资料都蛮古老的,一篇说要配置Remote-SSH的config路径的的文章被转发了好多好多次,这个emm,在2023年,已经不需要配置了。遂写下现在可能会遇到的问题。

接下来,介绍一下我遇到过的所有原因,以及完整的排查思路,希望对你有所启发。

在排查所有原因之前,请先确认一下自己的 IP 地址没有看错

情形1:连接不上前,没有弹出过输入密码的框

注意:没有弹出要求输入密码的框,
说明VScode和服务器并没有成功地进行交互。
这个时候需要排查没有成功交互的原因。

  1. 首先要考虑的是网络原因。尝试在主机上ping虚拟机或服务器的ip地址,ip地址可以使用ifconfig或者ipconfig指令查看。如果ping不通且使用的是虚拟机,转2;如果ping不通且使用的是服务器,转5;如果ping得通,转6;
    ping不通的图

  2. 主机和虚拟机不互通,多半是虚拟机网卡或防火墙有问题。如果虚拟机本身上不了网,请直接配置成NAT模式并通过这篇文章《Ubuntu虚拟机连不上网》解决上网问题再回来;如果可以上网,单纯是不互通,转3。

  3. 先排除是防火墙的原因,先关掉双方的防火墙。把虚拟机的防火墙直接关掉,自行搜索关闭xx系统防火墙的方式,Ubuntu的是sudo ufw disable;主机的防火墙一般不用管,但如果你怀疑是它的原因也可以关掉,Windows电脑的具体关闭方式就是搜索“防火墙和网络保护”,然后直接关。如果不是防火墙的原因,转4。

  4. 有个解决办法非常诡异,但确实百试百灵:尝试重启虚拟机的网卡。具体操作方式是搜索“网络连接”,如下图所示,禁用再启用虚拟机相关的网卡,过一分钟左右再次尝试ping。如果ping得通,转6;如果还是ping不通,可以考虑去找找windows的VMware相关的网络服务有没有启动,具体搜索“服务”,如果全都是对的但是还是ping不通,我就没办法了。
    在这里插入图片描述

  5. 主机与服务器不互通,多半是主机网卡或者双方防火墙有问题。极端情况下,服务器可能禁用了ping端口,这种情况考虑尝试别的网络连接方式,因此转7。其他的常见情况,一是该服务器有访问范围的限制,所以需要连上公司或学校的VPN才能访问;二是主机上不了网,可能连百度都访问不了;三是主机防火墙禁用了对服务器网段的访问,或者服务器防火墙禁了主机,这时需要关闭主机或服务器的防火墙。检查完之后能ping通了就转6。

  6. 尝试在终端中ssh连接服务器或主机,ssh [用户名]@[ip地址] -p [端口号,默认是22]。连不上,转7;连得上,转8。
    在这里插入图片描述

  7. ssh连不上通常是没开ssh服务或者ssh相关端口被禁用或更改。ubuntu虚拟机或服务器开启ssh服务的方式sudo apt install openssh-serversystemctl start ssh。ssh端口被禁用请关闭防火墙,若更改请换个端口。
    极端情况1:服务器或虚拟机没内存了,可以考虑重启服务器或者虚拟机。
    极端情况2:ssh之前连接的时候,针对Are you sure you want to continue connecting (yes/no/[fingerprint])? 这个问题不小心选择了其他选项而不是yes,导致默认拒绝连接,此时可以去~/.ssh文件夹下删除know_hosts文件。
    连得上之后转8

  8. 到这里,应该是终端能够顺利使用ssh连接服务器或虚拟机了,如果终端中都还是连不上虚拟机,转11。此时你再去使用VScode连接服务器或虚拟机,就应该会发现起码能弹出输入密码的框了。如果可以,转情形2;如果还不可以,转9。

  9. 网络没问题了但还是交互不了,大概率是你的VScode的SSH连接配置文件写得有问题。一个简单的SSH连接配置文件示意如下图,应该包含Host、HostName、User,而Port默认是22,可加可不加。如果修正后可以弹出输入密码的框了,转情形2;如果还不可以,转10。
    在这里插入图片描述

  10. 如果还弹不出来,还有两种极端情况——第一,VScode新建连接时,有时会弹窗要选择服务器的系统类型,可选项有Linux、Windows和MacOS,这个选错了的话,即使网络环境最终被修好了,VScode也无法识别对面的服务器或者虚拟机是什么系统,从而导致连接失败。解决方法是左下角点开设置,搜索remote platform,把平台改对,如下图所示。如果确实是对的,还是连不上,转11。
    在这里插入图片描述

  11. 极端情况二,主机或虚拟机的 .ssh 文件夹权限不对。首先以管理员权限打开vscode并尝试重新连接,试试能不能成功连上,如果能连上的话说明很可能就是这个原因,就接着往下看,如果你觉得不想再折腾了好不容易连上不管了,就可以关闭文章了。
    解决只有管理员权限能进行远程连接的方式是修改 .ssh 文件夹权限,Linux下 .ssh 的文件权限要是700,Windows下是778。在Windows中,可以右键属性->安全->编辑,删除所有的用户,然后添加当前登录Windows的用户即可。在Linux 中执行以下指令:

    cd ~/.ssh && chmod 700 * # Linux
    

情形2:输入密码之后显示连接不上

注意:已经弹出要求输入密码的框,但还是没连上,
说明问题出在VScode应用程序在服务器或虚拟机上的行为上,
这个时候需要排查VScode究竟哪一步操作出现了问题。

注意:连接的时候点右下角的‘details’(如下图)一般就能看到详细的报错语句。

在这里插入图片描述

  1. 检查密码是否输入错误,如果输入对了还是连不上,转2。
  2. 如果这是你首次连接或异地、异机器连接,转3;如果你以前连过这个服务器或虚拟机,是突然连不上的,转5。
  3. 检查是否是服务器或虚拟机存储空间满了。VScode连接后会安装相关插件,所以很可能是装到一半没存储空间了所以无法连接。如果真的满了,解决办法是先用终端先连上,腾出一部分空间;如果不是这个原因,转4。
  4. 检查服务器设置。对于Ubuntu或者其他的命令行能控制的Linux操作系统,修改/etc/ssh/sshd_config文件中:AllowTcpForwarding yes,然后重启ssh服务;对于TrueNas,依次点开“服务”-“SSH”-“设置”,勾选“允许TCP端口转发”(如下图)然后保存,即可重新连接。如果还不行,转5。
    在这里插入图片描述

参考:VScode使用Remote-ssh时碰到错误 channel 3: open failed: administratively prohibited: open failed

  1. 检查服务器或虚拟机上是否存在你的用户目录,检查方式是cd ~看看有没有反应。VScode连接后会安装相关插件,安装的路径默认是~/.vscode-server,但是有的系统它新安装的时候真没有自动创建用户目录~,这时候就需要手动创建,并且要将这个文件夹的所有者用chown设置成自己这个用户。如果不是这个原因,转6。
  2. 可能是距离上次连接的时间太长了或网络信号弱,自动断开了,点Retry重连就行。转7。
  3. 如果还不行,我目前没有别的解决办法了,可以把报错在评论区发给我看一下。
  • 19
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论
### 回答1: 为了使用 VS Code 进行 SSH 远程连接 Ubuntu,您需要完成以下步骤: 1. 在 Ubuntu 上安装 OpenSSH 服务器,并配置 SSH 密钥登录(若您的 Ubuntu 已经安装了 OpenSSH,且配置密钥登录,可跳过此步骤) 2. 在本地安装并配置 VS Code 的 Remote Development 插件。 3. 打开 VS Code,点击“视图”菜单下的“远程终端”,在弹出菜单中点击“连接远程主机”。 4. 在“连接远程主机”窗口中,输入要连接Ubuntu 主机的 IP 地址和用户名,点击“连接”。 5. 如果配置正确,您会被提示输入密钥的密码,输入密码并登录即可使用 VS Code 进行远程连接。 如果你的本地机器没有安装 ssh-keygen,也可以手动在本地机器上生成密钥,将其传到远程机器上进行密钥认证,这里只是简单的介绍流程,如果有具体问题可以继续提问 ### 回答2: VSCode是一款强大的文本编辑器,可以实现多种开发工作,远程连接Ubuntu就是其中之一。VSCode提供了内置的SSH插件,可以实现远程连接Ubuntu。以下是详细的步骤: 第一步:安装VSCode 如果你还没有安装VSCode,可以在官网上下载对应系统的安装包,然后按照安装向导安装即可。 第二步:安装插件 打开VSCode,在左侧的侧边栏中点击“Extensions”按钮,然后搜索“Remote-SSH”插件,安装。安装完成后,重启VSCode。 第三步:配置SSH连接 打开VSCode,点击左下角的“小人”图标,选择“Remote-SSH: Connect to Host...”。然后选择“Add New SSH Host...”(如果你已经有其他主机了,则可以在列表里选择“Add New SSH Host…”) 然后在弹出的对话框中填写连接信息。Host(远程主机的地址或者IP地址)、Port(SSH连接的端口,默认为22)、Username(远程主机的用户名)、Password或者PrivateKey(远程主机的密码或私钥)。 其中,PrivateKey是建议使用的方式,可以提高安全性。如果你使用密码验证,在输入密码后,可能会弹出“存在未知主机,是否信任该主机”提示框,输入“yes”后即可。 第四步:连接 配置完成后,可以在左下角的“小人”图标中看到已经新添加的主机。选中主机,点击“Connect”,即可连接连接成功后,你可以看到VSCode的编辑器左下角显示已连接的主机。 总结:VSCode提供了强大的SSH插件,可以方便地远程连接Ubuntu。通过这个插件,你可以在本地使用VSCode编辑器,而不需要登录Ubuntu进行开发。它的安装和配置非常简单,只需要几步即可完成。 ### 回答3: VSCode是一款免费开源的代码编辑器,它集成了诸多插件和功能,为开发者提供了丰富的开发体验。在很多场景下,我们需要使用远程主机运行代码,而SSH连接则是一种比较常见的方式。本文主要介绍如何通过VSCode SSH远程连接Ubuntu。 一、配置Ubuntu远程SSH服务 首先我们需要在Ubuntu上配置SSH服务。打开Ubuntu终端,输入以下命令: sudo apt-get update sudo apt-get install openssh-server 这样就安装完了SSH服务,接着我们需要修改配置文件,使用nano或其他编辑器打开SSH配置文件: sudo nano /etc/ssh/sshd_config 找到以下两行代码并去掉注释 PasswordAuthentication yes PubkeyAuthentication yes 改为以下代码 PasswordAuthentication no PubkeyAuthentication yes 最后重新启动SSH服务: sudo service ssh restart 二、在VSCode中安装插件 在VSCode中,我们需要下载安装Remote Development插件,这款插件支持远程开发,它会帮我们完成远程连接、文件传输、远程编译等操作。 在VSCode中按下F1键,输入“ext”,选择“Extensions: Install Extensions”,然后搜索并安装“Remote Development”插件。 三、连接远程主机 在VSCode中,打开Command Palette并输入“Remote-SSH: Connect to Host”,选择“Add New SSH Host”,输入Ubuntu主机的IP地址,并输入连接信息,例如: ssh username@IP_address 输入密码后即可连接远程主机。 四、在远程主机上编写代码 连接成功后,你就可以在远程主机上打开并编写代码了。你可以在VSCode的文件栏中找到远程主机上的文件,也可以在终端中运行程序。 总之,VSCode SSH远程连接Ubuntu,可以非常轻松地在一台主机上编写、打包和运行代码,提高开发效率,尤其适用于远程协作和服务器管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shandianchengzi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值