目录
引言
配置过程
1.本机安装OpenSSH
2.本机生成RSA公钥和私钥
4.vscode安装Remote - SSH插件
5.在vscode中ssh连接服务器
6.在本地vscode操作远程linux文件进行开发
7.在vscode上给远程linux机器需安装插件
常见问题解决
(1)connect timeout
(2)failed to install the vs code server!
(3)ssh远程连接失败
问题描述
原因分析
解决步骤
引言
传统的开发当中,在linux服务器中,用vi或者vim命令进行开发,麻烦,效率不高。而用vscode进行可视化地开发,则会非常高效和方便。
配置过程
1.本机安装OpenSSH
OpenSSH 可以让你在终端使用 ssh 命令,Windows一般自带。如何检查是否已经安装?搜索框搜索Windows PoweShell,然后选择以管理员身份打开,输入以下指令:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
如果电脑带有OpenSSH,则会像下面这样显示已Installed。
如果电脑未安装OpenSSH,则 State 均显示为 NotPresent。可以输入以下指令安装:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
OpenSSH 安装完成后,按下快捷键 Win + R,输入 cmd 进入终端,输入 ssh 可得如下结果:
2.本机生成RSA公钥和私钥
如果已经生成过,在用户目录下会有个.ssh文件夹。里面的id_rsa.pub是公钥,id_rsa是私钥。
如果没有之前生成过,则打开cmd,可以输入 ssh-keygen -t rsa -C "这里可以填写一些信息用来表明身份或者其它" 命令生成。中间需要输入什么的时候直接回车就行,一共需要三次回车。
在用户目录下的.ssh文件夹中查看,其中id_rsa.pub是公钥,id_rsa是私钥。如果执行命令前,已经存在公私钥文件,则会重新生成后进行覆盖。
3.将rsa公钥添加到远程linux的authorized_keys文件中
这一步的作用是:以后用vscode远程连接服务器的时候不用每次都输入用户密码。当然也可以不操作这一步,只不过每次登录需要输入一下密码,比较麻烦。
在远程linux中,进入到用户目录下的.ssh文件夹中
cd ~/.ssh
假如不存在 ~/.ssh,会提示-bash: cd: /.ssh: 没有那个文件或目录,则输入以下命令生成
ssh localhost
然后将本机生成的rsa_id.pub公钥上传至服务器【~/.ssh】处。
然后输入以下命令将其追加写入到~/.ssh目录下的authorized_keys文件中,为什么是追加写入?因为可能存在其他用户的公钥,千万别覆盖写入!
cat id_rsa.pub >> authorized_keys
如果不存在authorized_keys,【cat id_rsa.pub >> authorized_keys】也会自动生成出来。
4.vscode安装Remote - SSH插件
进入vscode插件,搜索并安装即可
还要做一个设置,作用是为了在连接的过程中显示SSH登录终端过程。这意味着用户可以在VSCode的集成终端中直接看到SSH登录的过程和结果,包括任何可能的登录提示或错误信息。因为很多时候ssh会失败,这样就可以查看失败信息。
设置过程:点击 文件->首选项->设置->拓展->Remote - SSH,然后找到 Show Login Terminal 并勾选。如下图所示。
5.在vscode中ssh连接服务器
vscode安装Remote - SSH后,左侧会出现一个像显示屏似的一个远程资源管理器板块,点SSH右边的“+”号,新建一个远程连接
然后在界面上方的输入框中输入ssh命令进行远程连接,格式如下:
ssh 用户名@ip地址 -p 端口号
然后选择ssh配置文件时,选择用户目录下的.ssh/config这个文件,并选择打开,如图:
在~/.ssh/config这个文件中,存放着我们所配置过的所有远程连接信息。每有一次新的连接,都会记录在这个文件中,方便下次直接连接。
然后右下角弹出如下信息,选择Connect(连接)
第一次连接时,会选择操作系统时,选择“Linux”即可。
然后开始连接,会让你输入用户密码(如果前面添加私钥那里已经操作过,则不会有输入密码这一步),然后等待连接(如果有地方要让你输入"yes"or"No",输入yes即可)
连接好后,看到左下角有个 SSH:ip地址,说明连接成功了。像下面这样
6.在本地vscode操作远程linux文件进行开发
像下面这样,在本地vscode,选择打开远程linux下的一个文件夹。
然后就可以可视化进行文件操作,开发代码等了,与传统的用vi命令进行开发相比,是非常方便的。
用vscode开发的方便之处
- 可以直接拖拽本地的文件上传到远程的linux服务器,将本机的文件,直接拖入vscode的目录栏中,即可实现文件的上传,无需繁琐的scp命令进行上传。
- 但是,要从服务器下载文件到本机的话,暂不支持拖拽下载。但是,在文件上点击右键,然后点击下载,也能实现快捷的下载功能。
- 其他实用操作:文件的删除、移动、重命名。和本地电脑一样管理文件就OK了。注意一点就是,尽量避免在vscode上进行大文件的文件操作,因为有可能会导致宕机。大文件还是在命令行中进行 rm cp 等操作较为稳妥。
下次重新连接也是很方便的
只要连接过一次,相应信息都会保存下来。关闭vscode后,再次打开,想直接到某个项目中进行开发,是很快速的,比如像下面这样。在远程资源管理器那里直接点击那个文件夹图标,即可弹出新窗口连接,然后进行开发就好。
7.在vscode上给远程linux机器需安装插件
由于是操作远程linux上的文件进行开发,还需要给远程linux安装插件,像下面图片这样。
当然如果还需要编译等,远程linux上要安装好gcc等编译器,以及make命令,cmake命令等,怎么安装这里就不细说了。安装好后,直接在vscode的终端处就可以用相应的命令编译运行等。
常见问题解决
(1)connect timeout
问题描述
mobaxterm通过ssh能正常连接服务器,而在vscode里远程连接服务器时则提示连接超时。
解决方法
增加远程连接的时间
在vscode的扩展程序中输入remote ssh,点击remote ssh中的设置按钮
选择extension settings,找到connect timeout并修改连接时间
(2)failed to install the vs code server!
问题描述
正常使用VS code SSH,退出VS code重新启动后,出现错误提示:Can't connect to the server, failed to install the vs code server。
解决方案
连接远程服务器,将当前用户目录下的隐藏文件夹.vscode-server夹删除(rm -r /~/.vscoder-server),之后在vscode上,重新连接ssh server,即可正常连接。
如果还是不能解决,参考下一节(3)ssh远程连接失败
(3)ssh远程连接失败
问题描述
错误提示有这种的
could not establish connection to “XXX“.Connecting was canceled.
还有这种的
VScode remote '_workbench.downloadResource' failed
还有这种的
vscode could not establish _workbench.downloadResource
总之,错误提示有很多种,总之就是在用 VSCode 通过 Remote 插件,远程连接到开发服务器时,报错(无法连接)的处理过程。
原因分析
一般是本地电脑更新了vscode版本之后出现的,因为远程linux服务器没有更新对应版本导致,因为远程linux服务器一般在内网,无法连外网,不会自动更新。
当我们使用 Remote 连接到远程服务器时,在远程linux服务器会有一个 .vscode-server 的隐藏目录,该目录的作用,就是存放不同 VSCode 版本的远程连接信息。在 .vscode-server/bin 目录有好多不同的 以HASH 版本号命名的文件夹,每有一种版本的本地电脑远程连接服务器就会产生对应的文件夹。类似下图这样:
正常情况下,如果本地电脑VSCode 软件有更新,则服务器会自动去下载对应版本的 vscode-server 软件,此时如果我们的 VSCode 有更新多个版本的话,就会在上述目录看到不同的 HASH 版本。正常情况下,这个 HASH 值,与本地电脑VSCode 软件当前版本的提交 HASH 是一致的,位置如下图所示:打开VSCode,点击菜单栏的【帮助】→ 点击进入【关于】→ 在弹出的弹窗中,即可查看VSCode的版本信息。
但是如果服务器无法连接外网,就无法自动下载对应版本的 vscode-server 软件,这就导致我们本地的软件版本已经由 A 更新到 B 了,但是远程连接的 vscode-server 软件还是 A 版本一样。版本不匹配,肯定就无法正常使用了。
解决步骤
(1)更新本地vscode及插件版本
首先要更新vscode客户端到最新版。
然后对应的remote ssh插件,也要更新到最新版,不然可能不兼容,也会连接不上。
(2)更新服务器端vscode-server版本
1、查看当前本地VSCode软件的版本号,就是前图所示提交的 HASH 值,复制下来;
2、替换如下网址中的 $COMMIT_ID ,然后到浏览器打开,即可开始下载对应的vscode-server软件;
# 稳定版的插件链接
https://update.code.visualstudio.com/commit:$COMMIT_ID/server-linux-x64/stable
3、下载完毕后,服务器创建指定目录
# 进入.vscode-server下的bin目录
cd /root/.vscode-server/bin
# 创建以 HASH 值命名的文件夹
mkdir 379476f0e13988d90fab105c5c19e7abc8b1dea8
4、将压缩包文件放入该目录,解压(注意后边的解压选项,是阿拉伯数字 1 )
cd 379476f0e13988d90fab105c5c19e7abc8b1dea8
tar -xvzf vscode-server-linux-x64.tar.gz --strip-components 1
5、解压完毕后,就可以删除多余的压缩包文件。不删除也行,看个人习惯。
rm vscode-server-linux-x64.tar.gz
6、操作结束,关闭 VSCode ,再重新打开,使其自动连接;或者不关闭软件,重新手动连接服务器也行。
(4)设置了authorized_keys仍需输入密码!
如果服务器端和本机vscode都配置完成,但是仍然需要输入密码,就要考虑到服务器端权限的问题了,通常采用如下命令解决:
cd ~
chmod 700 .ssh
cd .ssh
chmod 644 authorized_keys
记住以下权限原则:
1)authorized_keys的权限必须是600或者644 2).ssh目录的权限必须是700 3)/home/user目录必须是755