目录
参考文献
前言
下载安装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官网下载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官方插件库: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,应该是之前装其他软件时自动装上的。如果你的机器上没有,可以参考下面文章来下载并安装openssh。
Windows使用VSCode远程Linux(ConteOS)开发/调试C/C++(超详细)_zy_workjob的博客-CSDN博客
这部分就是最坑的部分了。
前置条件:要连的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。
步骤三:自己找一个传输软件,上传该压缩包到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-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。