SSH和VScode远程开发
使用SSH远程连接和VScode远程开发提高程序开发效率
注意事项
一、2022/11/23更新
更新Windows下SSH和VScode远程开发jetson nano(第5节内容)
前言
开发过程中经常会使用到嵌入式设备,外接显示器十分不方便,利用SSH远程连接和VScode远程开发更加方便,故记录下方便以后查看😄。参考自赵老师ros教程之SSH远程连接 赵老师ros教程之VScode远程开发
1. 概念
SSH(Secure Shell)是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。目前SSH协议已经被全世界广泛使用,大多数设备都支持SSH功能。SSH工具主要包含PuTTY和OpenSSH。
PuTTY是Windows上免费的SSH连接工具,通常用于使用SSH协议远程登录设备,最新版本可在PuTTY官网下载OpenSSH是SSH协议的开源实现。支持在Unix操作系统上运行,最新版本可在OpenSSH官网下载。目前Windows10已经包含OpenSSH客户端和服务器软件,可在设置-应用-应用与功能-可选功能中搜索按照- 参考自here
- Windows下个人经常使用
Xftp和Xshell
2. SSH远程连接实现
SSH架构上分为客户端和服务端两大部分,客户端是数据的发送方,服务端是数据的接收方,目前场景下假设PC端(虚拟机-ubuntu18.04)要发送数据到jetson nano上,那么PC端属于客户端,而jetson nano属于服务端,整个实现具体流程是:
- 分别安装SSH客户端与服务端
- 服务端启动SSH服务
- 客户端远程登录服务端
- 实现数据传输
2.1 安装SSH客户端与服务端
jetson nano安装服务端,指令如下:
$ sudo apt-get install openssh-server
PC端安装客户端,指令如下:
$ sudo apt-get install openssh-client
2.2 服务端启动SSH服务
jetson nano启动ssh服务,指令如下:
$ sudo /etc/init.d/ssh start
启动后查看服务是否正常运行:
$ ps -e | grep ssh
如果启动成功,会包含sshd和ssh两个程序。
jetson nano的ssh服务设置为开机自启动,指令如下:
$ sudo systemctl enabel ssh
流程如下图所示:

2.3 静态IP设置
让PC端和jetson nano处于同一局域网下,否则无法通过SSH远程连接。这里通过设置PC端和jetson nano的静态IP并使用网线连接实现同局域网
2.3.1 PC端设置静态IP
可在设置-网络和Internet-以太网-更改适配器选项中显示如下界面:

找到对应的以太网,右键点击属性进入属性设置界面如下图所示:

点击Internet协议版本 4(TCP/IPv4)然后点击属性进入静态IP设置界面如下图所示

设置PC端静态IP为192.168.101.50点击确定即可完成PC端的配置,当需要使用网络时别忘记修改为自动获取IP。
2.3.2 jetson nano设置静态IP
让jetson nano外接显示器,输入以下指令:
$ sudo vi /etc/network/interface
并添加如下内容
# interfaces(5) file used by ifup(8) and ifdown(8)
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
auto eth0
iface eth0 inet static
address 192.168.101.66
netmask 255.255.255.0
#gateway 192.168.1.1
设置jetson nano静态IP为192.168.101.66,输入:wq!保存退出,输入sudo reboot重启后设置的静态IP才会生效。可通过ifconfig或networkctl status查看对应的IP。
2.3.3 测试
通过网线将PC端和jetson nano连接,在PC端输入如下指令测试二者是否处于同一个局域网下:
$ ping 192.168.101.66 // ping的是jetson nano设置的静态IP即192.168.101.66
如果输出如下内容,则说明二者连接成功

2.4 客户端远程登录服务端
PC端登录jetson nano使用如下指令:
$ ssh 账号@ip地址
账号名可通过whoami获取,ip地址为前面设置的jetson nano静态IP地址即192.168.101.66。
然后根据提示,输入jetson nano登录密码,即可成功登录。
如果退出登录,可以调用exit命令:
$ exit
流程如下图所示:

2.5 实现数据传输
上传文件:
$ scp 本地文件路径 账号@ip:jetson nano路径
上传文件夹:
$ scp -r 本地文件夹路径 账号@ip:jetson nano路径
下载文件:
$ scp 账号@ip:jetson nano路径 本地文件夹路径
下载文件夹:
$ scp -r 账号@ip:jetson nano路径 本地文件夹路径
假设当前PC端的/home/huanyu/nano目录下有一个文件nano.cpp和一个文件夹nano需要上传到jetson nano的/home/zhlab/PC目录下,同时需要从jetson nano的/home/zhlab/PC目录下下载一个文件PC.cpp和一个文件夹PC到PC端的/home/huanyu/nano下,指令流程如下图所示

3. 使用优化
每次登录jetson nano,都需要输入密码使用不方便,如下图所示。可以借助密钥简化登录过程,实现免密登录,提高操作效率。

3.1 免密输入
实现思想是:生成一对公钥私钥,私钥存储在本地,公钥上传服务器,每次登录时,本地直接上传私钥到服务器,服务器有匹配的公钥就认为是合法用户,直接创建SSH连接即可。具体实现步骤只有两步:
- 本地生成密钥对
- 将公钥上传至jetson nano
3.1.1 生成密钥对
本地PC端生成公私钥:(一路回车默认即可)
$ ssh-keygen
如下图所示:

从上图中可以看到用户目录.ssh文件夹下多出了两个文件:
- id_rsa(私钥)
- id_rsa.pub(公钥)
3.1.2 将公钥上传至jetson nano
将PC端的公钥上传,指令如下:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub 账号@ip
上面这条指令是写到了服务器上的ssh目录下,该目录下有文件authorized_keys保存了公钥内容。流程如下图:

至此,jetson nano的免密登录已全部完成,效果如下

3.2 修改连接名
每次通过SSH连接jetson nano时都要输入账号@ip一串字符,太过繁琐。可以设置配置文件来简化输入,参考自盈不足
创建config文件:
$ sudo touch ~/.ssh/config
$ sudo vi ~/.ssh/config
添加以下内容保存退出即可:
Host nano
HostName 192.168.101.66
Port 22
User zhlab
- Host后面跟上需要修改的连接名
- HostName为jetson nano设置的静态IP地址,可通过
ifconfig或者networkctl status指令查看 - Port为端口号,默认22即可
- User为jetson nano的用户名,可通过
whoami指令查看
至此,jetson nano修改连接名完成,效果如下:

4. VScode远程开发
通过SSH可以远程操作jetson nano,但是也存在诸多不变,比如:编辑文件内容时,需要使用vim编辑器,且一个终端内,无法同时编辑多个文件,但通过VScode以图形化的方式在jetson nano上远程开发程序,比ssh的使用更方便快捷,可以大大提高程序开发效率。参考自赵老师ros教程之VScode远程开发
4.1 准备工作
VScode远程开发依赖于ssh,请先配置SSH远程连接
4.2 插件安装
启动VScode按照以下操作
- 点击扩展商店
- 输入插件名称
Remote Development - 选择插件
- 点击安装
流程如下图所示

4.3 配置远程连接
Step1.使用快捷键Ctrl+Shift+P打开命令输入窗口,并输入Remote-SSH:Connect to Host...,选择第一个选项。

Step2.步骤1选择完成后弹出一个新的命令窗口如下,其中nano为之前在SSH配置过的连接名直接点击便可直接连接到jetson nano,或者选择列表中的Add New SSH Host创建一个新的SSH。

Step3.如果是创建新的SSH连接,则输入:ssh 账号@ip 然后回车。其中账号是jetson nano用户名zhlab,可通过whoami指令查看,ip是jetson nano的静态IP192.168.101.66,可通过ifconfig或networkctl statu查看。

Step4.步骤3完成后的弹窗列表选第一个选项,即可完成配置,配置完成后有相关提示信息


4.4 使用
Step1.使用快捷键Ctrl+Shift+P打开命令行窗口,输入Remote-SSH:Connect to Host...,此时可以看到列表中包含4.3中配置的ip地址,如下图所示。直接选择后,VScode会打开一个新窗口。

或者,也可以点击右侧边栏的远程资源管理器,选择SSH Targets,选择要连接的服务器,右击选择在本窗口或新建窗口实现远程连接。如下图所示

Step2.在步骤1弹出的新窗口中输入Ctrl+K Ctrl+O指令,在弹窗列表中选择需要打开的文件夹点击确定即可。

至此,VScode远程开发配置完成。
5.windows远程开发
每次远程连接都需要开启虚拟机去登录nano,麻烦。刚好最近在windows下也安装了vscode,试下windows下进行ssh远程登录吧。
参考:windows免密ssh登录linux、Window(客户端)ssh免密码登录Linux(远程)、windows实现ssh免密登录服务器
5.1 下载OpenSSH
首先检查下电脑是否安装了ssh服务,打开cmd命令行输入ssh,如果出现以下内容说明已经安装OpenSSH

如果没有需要自行安装,安装请参考windows实现ssh免密登录服务器。
先测试下windows能不能连接jetson nano,首先确保windows与jetson nano处于同一局域网,通过ping IP如果输入以下内容,说明二者连接成功

5.2 配置免密钥登录
首先测试下windows使用ssh登录jetson nano,指令如下:
ssh 账号@ip地址
账号名在jetson nano上可通过whoami获取,ip地址为前面ping通的IP地址即192.168.101.66。
然后根据提示,输入jetson nano登录密码,即可成功登录。
如果退出登录,可以调用exit命令:

接下来实现免密登录,主要参考windows免密ssh登录linux
1.添加HOME变量
打开环境变量属性首页(右击此电脑点击属性➡点击高级系统设置➡点击环境变量,可参考windows10系统如何设置环境变量),打开环境变量属性页面,在用户变量部分点击新建,变量为HOME,值为C:\Users\name,其中name为用户名,可以自行查看自己电脑的用户名,之后生成的密钥对默认保存在这个目录下。

2.生成密钥对
打开cmd命令行,在ssh程序所在目录运行,或者添加系统环境之后随处运行ssh-keygen -t rsa这条命令用来生成密钥,随后一路回车,当看到一幅矩形图生成,那么密钥生成成功。此时在用户目录的.ssh文件夹下会多出两个文件即id_rsa(私钥)、id_rsa.pub(公钥)

3.将公钥添加到Linux账户
同样的打开cmd命令行,输入
ssh username@host "cat >> ~/.ssh/authorized_keys" < C:\Users\name\.ssh\id_rsa.pub
这条命令首先登录Linux(jetson nano),然后将本机即win下的公钥添加到账户个人目录下,从而实现免密码登录。注意这一步需要输入账户的密码。

4.验证
cmd下输入ssh username@host uname,如果看到输出Linux表示添加成功
同样可以直接输入ssh username@host,这时可以看到不用输入密码即可登录Linux了。
5.3 使用优化
每次连接时虽然不用输入密码,但是需要输入一长串连接名,可以写个配置文件修改连接名,在C:\Users\Admin.ssh\文件夹下创建一个config.txt文件,内容如下
Host nano
HostName 192.168.101.66
Port 22
User zhlab
- Host后面跟上需要修改的连接名
- HostName为Jetson nano的IP地址
- Port为端口号,默认22即可
- User为jetson nano的用户名
添加完成后将后缀名.txt删除,删除后的文件名为config。
至此,jetson nano修改连接名完成,效果如下所示。参考自盈不足

5.4 Windows下vscode远程开发
通过SSH可以远程操作jetson nano,但是也存在诸多不变,比如:编辑文件内容时,需要使用vim编辑器,且一个终端内,无法同时编辑多个文件,但通过VScode以图形化的方式在jetson nano上远程开发程序,比ssh的使用更方便快捷,可以大大提高程序开发效率。参考自赵老师ros教程之VScode远程开发
1.准备工作
VScode远程开发依赖于ssh,请先配置SSH远程连接
2.插件安装
启动VScode按照以下操作
- 点击扩展商店
- 输入插件名称
Remote Development - 选择插件
- 点击安装
图解如下所示

3.配置远程连接
Step1.使用快捷键Ctrl+Shift+P打开命令输入窗口,并输入Remote-SSH:Connect to Host...,选择第一个选项。

Step2.步骤1选择完成后弹出一个新的命令窗口如下,其中nano为之前在SSH配置过的连接名直接点击便可直接连接到jetson nano,或者选择列表中的Add New SSH Host创建一个新的SSH。

Step3.步骤3完成后的弹窗列表选第一个选项Linux,即可完成配置,配置完成后有相关提示信息

4.使用
在弹出的新窗口中输入Ctrl+K Ctrl+O指令,在弹窗列表中选择需要打开的文件夹点击确定即可。

至此,VScode远程开发配置完成。
6. 参考
- SSH概述
- 盈不足
- 赵老师ros教程之SSH远程连接
- 赵老师ros教程之VScode远程开发
- windows免密ssh登录linux
- Window(客户端)ssh免密码登录Linux(远程)
- windows实现ssh免密登录服务器
- windows10系统如何设置环境变量
感谢各位看到最后,若有帮助请帮忙点个👍
更多推荐


所有评论(0)