vscode通过Remote-SSH连接远程机器(ubuntu 18.04)
需求:
1.vscode可以通过SSH协议连接到远程机器
2.vscode可以通过SSH协议访问远程机器上的命令行终端功能
3.vscode可以通过SSH协议访问远程机器上的任意文件
4.vscode可以通过SSH协议使本机与远程机器文件互传
环境:
1.工作机器在局域网内,系统为win7,其本地ip:192.168.0.109,且带一张无线网卡,可用于访问Internet。
2.远程机器一个虚拟机,其系统是ubuntu18.04(用户名:tanglx,密码:123),其被布置在局域网中另外一台机器上,这台虚拟机拥有和本地局域网互通,以及访问Internet的能力,其本地ip:192.168.0.105。
步骤:
Step1:vscode是通过SSH连接远程机器,故而本机需要安装SSH客户端。在下列链接处下载相应的OpenSSH版本。
Releases · PowerShell/Win32-OpenSSH · GitHubwx
我本机下载的是,OpenSSH-Win64.zip,将该文件解压到指定文件夹,我本机解压到D盘,这里需要记住,ssh.exe的路径,此处ssh.exe的全路径为D:OpenSSH-Win64ssh.exe。后面vscode会使用该路径来调用ssh客户端。
Setp2:vscode是通过SSH协议来连接到远程机器,故而远程机器上需要有SSH服务。在远程机器上执行下列语句,用来安装SSH服务。
更新源信息:sudo apt update
安装SSH服务:sudo apt install openssh-server
一般安装之后,SSH服务就会启动,但还是提供如下三个命令用于查看,或者重启SSH服务。
设置开机启动:systemctl enable ssh
重启SSH服务:systemctl restart ssh
查看SSH服务状态:systemctl status ssh
顺利的话,直接就可以了,且此处就可以跳至下一步骤。不顺利可以跳到后话章节看一下。
Setp3:在我们的工作机器上下载安装一个vscode,需要注意的是vscode支持在win7上使用的最后一个版本是1.70.3,我工作机安装的是win7,故而下载的是vscode(1.70.3)。
vscode官网:Visual Studio Code - Code Editing. Redefined
vscode 1.70版本下载地址:Visual Studio Code July 2022
Setp4:在vscode安装完成后,点击菜单栏中的“View”--“Extensions”,在“Extensions”窗口的搜索栏中输入Chinese,选择出来的Chinese(Simplifiled)(最好是有Microsoft认证的),点击安装,安装完成后,vscode就变成中文支持了。
Setp5:点击菜单栏中的“查看”--“扩展”,在“扩展”窗口的搜索栏中输入“Remote SSH”,选择下面显示的Remote-SSH项(最好是有Microsoft认证的),点击安装。安装完成后,需要设置本机的ssh路径,操作步骤:点击左侧菜单栏的“扩展”,找到安装的Remote SSH,点击“设置”--“扩展设置”,在右边的设置详情区,找到“Remote SSH:Path”项,并且填入Step1中的ssh.exe的绝对路径,示意详情如下图:
Step6:点击左侧出现的“远程资源管理器”,会出现一个“远程资源管理器窗口”,在窗口中可以看到“SSH TARGETS”这一项,点击旁边的“+”号,会弹出命令窗口,在命令窗口输入:
“ssh tanglx@192.168.0.105”
具体如下图所示:
按下回车键,会出现一些路径选择,以及一些设置和帮助项,其具体如下图。我们选择其中一个路径“C:ProgramDatasshssh_config”。此处需要注意的是要保证该文件或者文件夹拥有创建修改的权限,如果没有相关权限,可以指定其他地方。注:事实上此处是选择一个文件作为ssh连接的配置文件,我们可以自己指定文件。如果需要指定文件,我们在“Remote - SSH”扩展的“扩展设置”中找到Remote SSH:Config.file项,即可进行相应的编辑。
Step7:完成上述动作后,在SSH TARGETS下会出现一个项,这个项是一个SSH连接的实例,其如下图所示:
在该项上点击右键,选择“Connect Host In Current Window” ,等待其连接成功,一般都会成功。如果不成功,则需要根据具体原因来查找,此处不讲述。在连接成功之后,远程机器会去下载相应版本的vscode-server,并且将其运行起来。在vscode的“查看”--“终端”这一栏会有如下信息:
tanglx@192.168.0.105's password:
2074f1407276: running
Acquiring lock on /home/tanglx/.vscode-server/bin/a21a160d630530476218b85db95b0fd2a8cd1230/vscode-remote-lock.tanglx.a21a160d630530476218b85db95b0fd2a8cd1230
Installing to /home/tanglx/.vscode-server/bin/a21a160d630530476218b85db95b0fd2a8cd1230...
2074f1407276%%1%%
Downloading with wget
Download complete
2074f1407276%%2%%
tar --version:
tar (GNU tar) 1.29
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later .
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
#####################省略N行########################
2074f1407276: start
SSH_AUTH_SOCK====
DISPLAY====
webUiAccessToken====
listeningOn==40795==
osReleaseId==ubuntu==
arch==x86_64==
tmpDir==/run/user/1000==
platform==linux==
unpackResult==success==
didLocalDownload==0==
downloadTime==156666==
installTime==2449==
extInstallTime====
serverStartTime==287==
connectionToken==b064b0e4-0f5c-4c26-9c81-e9419c37bee1==
2074f1407276: end
且在完成之后,查看目标机器上的会多一个文件夹:~/.vscode-server,该文件夹是vscode的服务端程序。查看vscode界面,在左下角会有一个连接的标识,表示连接成功。其详情如下所示:
Step8:经过上述步骤,我们已经完成了需求1,即vscode可以通过SSH连接到远程机器了。现在需要使用vscode打开一个远程机器的终端,并且进行一些测试操作。在已经连接成功的情况下,点击命令菜单“终端”--“新建终端”,即可得到一个远程终端。我在终端里输入了一个“ip a”命令,表示该终端已经可用,具体如下图所示:
Step9:还剩最后一个需求3,需要对远程机器的文件进行自由访问。 我们这里使用上一步骤的终端在用户目录下创建一个子目录MyPrj1,具体如下:
点击左侧菜单栏的“资源管理器”--“打开文件”,然后在命令提示栏中输入/home/tanglx/MyDir1,点击确定,然后输入密码,就可以获取对指定远程文件夹的访问项,具体如下图所示:
打开成功后,在“资源管理器”窗口中,会有一个MYDIR1的项,我们使用旁边的“新建文件”,“新建文件夹”,在该目录下创建一个src目录,并且在src下创建一个main.cpp。创建完成之后的详情如下:
Step10:上一步骤,实现了需求3,即对远程文件的访问权限。此一步将讲解实现需求4。首先讲如何进行远程文件下载,我们在本机新建一个文件夹“F:Remote_MyDir1”,右键点击vscode资源管理器中的main.cpp,选择“下载”,然后指定下载到文件夹“F:Remote_MyDir1”,点击确定之后,就会发现main.cpp已经被下载到我们指定的目录中了,具体如下:
现在下载远程文件OK了,那如何上传呢?我们在刚才创建的本机文件夹 “F:Remote_MyDir1”中新建一个文件Test.c,然后点击Test.c文件,拖拽到vscode资源管理器中的src下,Test.c便到了远程服务器src目录下。
对于文件夹的上传/下载操作,和文件类似。至此,需求4变已实现了。
后话:
后话段主要记录一些初步了解时候的花絮,如果按照上述步骤,已经实现所有需求,则后话可以不观看了。但是如果,前面的事情遇阻或者不顺利,或许此处会给你帮助。
花絮1:
请跳过此行阅读:搜索标记(Recommends: ssh-import-id but it is not going to be installed)
安装远程机器openssh-server遇阻,我在安装时候报错如下:
上述错误意思是,需要安装的openssh-server依赖的openssh-client(=1:7.6p1-4),与本机上自带的openssh-client不同,故而需要安装相同的openssh-client版本,执行下列命令,安装相应版本之后,再来安装openssh-server才行。
花絮2:
在Step7中,使用vscode连接远程机器时候,最好保持远程机器可以访问Internet。因为在第一次连接时候,远程机器会下载安装vscode-server,并且将文件放到~/.vscode-server/文件夹中。如果远程机器无法访问外网,那么只能用其他方式,拷贝对应的文件到远程机器进行安装。具体如下:
I.查看本地vscode的提交编号,在vscode界面点击“帮助”--“关于”,会弹出一个对话框,点击复制,获取到对应的提交编号。
II:到下列地址下载对应的vscode-server的包
https://update.code.visualstudio.com/commit:a21a160d630530476218b85db95b0fd2a8cd1230/server-linux-x64/stablex
需要注意的是链接中“commit:”后的内容需要时步骤I中获取的提交编号。我这里填写的是我本机vscode的提交码,看官需要使用自己在步骤I中获取的提交编号。
III:将下载的包vscode-server-linux-x64.tar.gz解压到目录
~/.vscode-server/bin/a21a160d630530476218b85db95b0fd2a8cd1230/
如果不存在该目录,则需要创建,这里需要注意的是,bin的子目录名称,也是使用的在步骤I中获取的提交编号,我这里填写的是我本机vscode的提交码,看官需要使用自己在步骤I中获取的提交编号。
花絮3:
我之前未接触过vscode,所以我觉得作为一个新人的第一视角是珍贵的,是更利于各位看官初次接触vscode的。但是在我写这篇文章时候,已然已经配置好了很多东西,但是为了那种新人的第一视角,我还是将有些东西卸载,或者重装了,以给各位看官提供那种新人的第一视角。
但是,在我使用vscode连接远程机器时候,出现了如下问题:
请跳过本行阅读,搜索标记(REMOTE HOST IDENTIFICATION HAS CHANGED!)
经过在网上查找答案,发现是由于我之前使用本机连接过另一台虚拟机,其用户名,IP和现在这台虚拟机一模一样,而本机SSH,会保留之前回话的密钥。解决办法是在SSH目录,使用命令行执行
ssh-keygen -R $server_ip
该命令的本意是重置SSH缓存中指定IP的密钥。
我本地执行示意图如下:
在执行栏密钥缓存清理之后,再进行连接,会出现如下输出,只需要输入yes,然后再输入密码即可正常连接。
同理,如果客户端改变了(机器改变了,但是用户名和ip未发生变化),出现连接问题,服务端也可以使用该命令来对服务端缓存的对应IP的密钥来进行重置。
花絮4:
ubuntu18.04中,用户名一定是小写的。
我本来创建的虚拟机,使用的用户名是大写字母(Tanglx)开头。结果导致我在使用ssh连接ubuntu时候一直写的是大写:
ssh Tanglx@192.168.0.105
这就导致SSH一直验证不过。。。搞了好久,突然发现用户名貌似只能小写。
使用 ssh tanglx@192.168.0.105
就可以过了。
这个事,我搞了2,3个小时。。。无语。。。所以谨此记下。。