无网络机器上,win下vscode客户端通过ssh连接linux服务器

目录

参考文献

前言

下载安装VSCode

下载

安装

下载和安装必要的VSCode插件

下载

安装

客户端通过ssh远程连接linux服务器

下载并安装ssh

远程连接linux服务器

中文网页中较全面的ssh免密登录方案和说明

特殊情况:只需要连接一个远程主机的一个用户

一般情况:需要连接一个远程主机的多个用户,或多个远程主机的用户


参考文献

Windows使用VSCode远程Linux(ConteOS)开发/调试C/C++(超详细)_zy_workjob的博客-CSDN博客

VScode安装离线插件_栀虞子的博客-CSDN博客_vscode离线安装插件

vscode远程连接服务器问题汇总_COHREZ的博客-CSDN博客_could not establish connection to xhr failed

前言

在无网络的机器上安装任何软件都是麻烦的,因为你不知道安装过程中还会不会有对网络的需求。

网上的教程有些比较老,而导致没法解决过程中遇到的问题。

本文专门针对网络环境下vscode通过ssh远程连接linux服务器并进行开发调试做一个介绍。

下载安装VSCode

下载

找一台能联网的机器,打开vscode官网下载win下vscode客户端对应安装包。

VSCode官网:Visual Studio Code - Code Editing. Redefined

在Download界面下,可以看到win下的客户端有多个,根据需要下载。

其中System Installer和User Installer的区别在于安装到根目录下还是当前用户目录下。 

没有管理员权限的账户应当下载User Installers的版本,有管理员权限的账户建议下载Sytem Installer的版本。

其中64 bit、32 bit、arm就是不同的机器指令集架构了,现在一般都是64位机,选择64 bit就行。

安装

将下载好的安装包转移到需要安装VSCode客户端的机器上。

按正常软件安装步骤安装即可。

有一步选择附加任务中,我建议全都下面五项勾上。(如果勾选了“添加到PATH”,则安装完需要重启一下电脑)

 安装细节可以参考:VScode安装教程(超详细版)_8号葫芦娃的博客-CSDN博客_vscode安装

下载和安装必要的VSCode插件

下载

因为是离线机器,所以vscode插件无法在线自动下载并安装。需要自己在可以联网的机器上下载好这些插件再转移过去并安装。

VSCode官方插件库:Extensions for Visual Studio family of products | Visual Studio Marketplace

我需要用到C++语言,需要ssh来远程连接linux服务器,还希望客户端语言是中文的。

因此需要下载下面几个插件

C/C++(VSCode中运行C++必须):C/C++ - Visual Studio Marketplace

Remote-SSH(ssh远程连接必须):Remote - SSH - Visual Studio Marketplace

Remote - SSH: Editing Configuration Files(这个不一定是必须的,我也不确定):Remote - SSH: Editing Configuration Files - Visual Studio Marketplace

Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code(需要中文客户端的则下载):Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code - Visual Studio Marketplace

网页上下载按钮比较不明显,在右侧有个Download Extension按钮,可参考下图找到。其中C/C++针对不同机器有不同版本,选择适合自己的,我这里选择Windows x64。

所有插件以vsix为文件后缀。

安装

将下载好的插件转移到需要安装的机器上的任意位置。

打开VSCode,根据如下图所示步骤找到对应插件并离线安装

在这里插入图片描述

 该过程应该没有任何问题。

其中中文插件安装完需要重启生效。

如果remote-ssh和Remote - SSH: Editing Configuration Files安装出现问题,可能是没有ssh的原因,可以先参考本文后面的内容先下载并安装openssh。

客户端通过ssh远程连接linux服务器

下载并安装ssh

本人机器上原来就有ssh,应该是之前装其他软件时自动装上的。如果你的机器上没有,可以参考下面文章来下载并安装openssh。

Windows使用VSCode远程Linux(ConteOS)开发/调试C/C++(超详细)_zy_workjob的博客-CSDN博客

远程连接linux服务器

这部分就是最坑的部分了。

前置条件:要连的linux服务器可以通过ssh连接。

刚开始的连接过程可以参考下面两个文章,两篇文章分别提供了不同的连接方案。第二篇文章还包括了免密登录的内容。

Windows使用VSCode远程Linux(ConteOS)开发/调试C/C++(超详细)_zy_workjob的博客-CSDN博客

基于VSCode的C++远程开发环境搭建教程(Win10) - 时间的风景 - 博客园

由于这两篇文章都是在联网条件下的,所以在ssh远程连接时会遇到一些报错,导致无法连接的情况。

下面解释下报错原因和解决方案。

原因:

我遇到的报错一般有两种:

Could not establish connection to : XHR failed.

或者只报无法连接,没有报具体原因。

基本上都是无法联网导致的。

在remote-ssh连接服务器的过程中,会在linux用户目录下下载安装vscode服务端。大概过程为,创建一个.vscode-server文件夹,该文件夹下有个bin,里面放了一个以commit id命名的文件夹,该文件夹下有两个文件,其中一个文件名叫vscode-server.tar.gz。

这两个文件其实都是半成品,是remote-ssh想下载又下载不下来导致的。

remote-ssh的执行脚本位置为win中C:\Users\用户名\.vscode\extensions\ms-vscode-remote.remote-ssh-0.90.1\out\extension.js,里面有段语句包含了强制下载过程。

(我的踩坑点是参考了这篇文章Linux(Ubuntu18.04)使用VScode连接ssh主机时报错XHR(wget download failed)解决方法_程序猿_琦玉的博客-CSDN博客

这篇文章中的方法以及其参考的文章的方法我都试过了,没能成功,要么改得脚本语法错误,要么仍然执行失败。厉害的大佬可以去尝试改进下脚本。

解决方案:

参考下面这篇文章vscode远程连接服务器问题汇总_COHREZ的博客-CSDN博客_could not establish connection to xhr failed

中问题2的方案即可。

为防止链接失效,我这边再写一下。

步骤一:查看commit id,在本地的vscode的关于中查找

请添加图片描述

其中提交后的一串英文和数字即为commit id,或者登陆到服务器$HOME文件夹中,ls -a查看隐藏目录$HOME/.vscode-server/bin下的文件夹名称
步骤二:在该链接下手动下载server的压缩包vscode-server-linux-x64.tar.gz

https://update.code.visualstudio.com/commit:${COMMIT_ID}/server-linux-x64/stable

注意将${COMMIT_ID}替换为刚刚查到的commit id。

实际上vscode版本还分stable和insider的,vscode为蓝色图标的为stable版,绿色图标的为insider版。insider版需要将上述链接最后的stable改成insider。

对于arm的64位机器,需要将链接中的x64改成arm64,如下所示。(对于一些较新版本的vscode客户端,可能还没有arm64的服务端,笔者使用1.72.2版本的客户端是有的)

https://update.code.visualstudio.com/commit:${COMMIT_ID}/server-linux-arm64/stable

步骤三:自己找一个传输软件,上传该压缩包到linux服务器的这个目录下~/.vscode-server/bin

步骤四:解压,并更改解压文件夹名字

cd ~/.vscode-server/bin
tar -zxf vscode-server-linux-x64.tar.gz
mv vscode-server-linux-x64 ${COMMIT_ID}

然后尝试重新连接,即可解决问题 。

接下来就可以在vscode左上角的资源管理器里打开linux上项目文件夹进行读、写、debug了。

中文网页中较全面的ssh免密登录方案和说明

针对特殊情况和一般情况分别介绍

特殊情况:只需要连接一个远程主机的一个用户

只需要按照下方连接中“免密登录远程主机”的部分进行操作就可以了。其中,因为没有ssh-copy-id命令而需要在powershell中生成一个function的部分,可以简化为将该公钥字符串通过复制的方式复制到远程主机的~/.ssh/authorized_keys文件的最后面。

基于VSCode的C++远程开发环境搭建教程(Win10) - 时间的风景 - 博客园

这种特殊情况可以适用于大多数需求,网上教程也一大堆,随便查查就有了,这里不多作说明。

一般情况:需要连接一个远程主机的多个用户,或多个远程主机的用户

当需要连接的用户数量不多(可能少于7个?)时,可以按照如下方法使所有用户都能免密登录(我的机器没网,不容易截图过来,所以下面没图,我只能尽可能说明)。

免密登录其实就三个步骤:

1、生成秘钥和公钥

2、在服务器端/远程主机端的~/.ssh/authorized_keys中加入需要用到的公钥。

3、配置本地~/.ssh/config文件

下面分别描述这三个步骤。

第一步:生成秘钥和公钥

本地为win的,打开powershell或cmd,为linux的打开命令行。

执行命令ssh-keygen,提示“Enter the file in which to save the key(C:\Users\Xxxx/.ssh/id_rsa):”,按照提示输入存储的路径,路径格式为.ssh/id_rsa_xxx,输入完回车;想用默认名的话,不输入直接回车。

后续会提示“Enter passphrase(empty for no passphrase)”和"Enter same passphrase again",是让输入什么ssh相关的密码的,不懂的话(我也不懂),就全都直接回车,不影响。

这样在~/.ssh下就生成了一个公钥和一个秘钥。秘钥文件名就是你之前该的名字或默认名字id_rsa,公钥文件名就是在秘钥文件名后面加了后缀.pub。

如果希望改变生成的公钥的后缀,可以用"ssh-keygen -C xxxx"命令来将公钥末尾注释改成xxxx,用于人眼区分这是来自哪里的公钥。其他ssh-keygen的参数可以参考下面的链接。

ssh-keygen 常用命令与参数_guanjianhe的博客-CSDN博客_keygen命令

申明一点:一对公钥秘钥是可以作用于多个远程主机的,并不一定在连接多个用户的时候需要生成多对公钥秘钥,具体的可以根据自己情况决定生成几对。

第二步:服务器端/远程主机端加入公钥

在远端进入~/.ssh目录(没有的话自己建)下,将本地生成的公钥粘贴到该目录下的authorized_keys文件(没有的话自己建)的末尾。

第三步:配置本地~/.ssh/config文件

打开本地~/.ssh/config文件,新建或修改每一个需要登录的服务器和用户的配置为如下配置(下面仅展示最简配置,如果有其他需求,可以自行添加其他配置)

# 下方所有x为自己的配置。
# Host后xxxxxx表示自己取的别名,后续登录直接用ssh xxxxxx进行登录。
# 重点:config文件中所有别名都不能一样。
# HostName为主机域名或ip地址
# User为用户名
# IdentityFile为指定使用的秘钥文件的地址
# IdentitiesOnly为yes,表示只通过指定的秘钥作为秘钥。(ssh的秘钥公钥查找方式我不太搞得清楚,大概是这意思)
Host xxxxxx
    HostName xx.xx.xx.xx
    User xxx
    IdentityFile ~/.ssh/id_rsa_xxx
    IdentitiesOnly yes

该配置文件的其他问题,比如公钥秘钥对数量很多时,提示“Too many authentication failures for user123”类似问题的解决方法,可以参考下面链接。

linux - How do I configure SSH so it doesn't try all the identity files automatically? - Super User

前面三步完成后就可以使用ssh xxxxxx或者ssh xxx@xxxxxx去免密登录了。

此时通过vscode用ssh登录远程机器也一样是免密的。当然,第一次登录时提示选择配置文件时要选择~/.ssh/config。

  • 10
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值