注意事项

一、2022/11/23更新

更新Windows下SSH和VScode远程开发jetson nano(第5节内容)

前言

开发过程中经常会使用到嵌入式设备,外接显示器十分不方便,利用SSH远程连接和VScode远程开发更加方便,故记录下方便以后查看​😄。参考自赵老师ros教程之SSH远程连接 赵老师ros教程之VScode远程开发

1. 概念

SSH(Secure Shell)是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。目前SSH协议已经被全世界广泛使用,大多数设备都支持SSH功能。SSH工具主要包含PuTTYOpenSSH

  • PuTTY是Windows上免费的SSH连接工具,通常用于使用SSH协议远程登录设备,最新版本可在PuTTY官网下载
  • OpenSSH是SSH协议的开源实现。支持在Unix操作系统上运行,最新版本可在OpenSSH官网下载。目前Windows10已经包含OpenSSH客户端和服务器软件,可在设置-应用-应用与功能-可选功能中搜索按照
  • 参考自here
  • Windows下个人经常使用XftpXshell

2. SSH远程连接实现

SSH架构上分为客户端和服务端两大部分,客户端是数据的发送方,服务端是数据的接收方,目前场景下假设PC端(虚拟机-ubuntu18.04)要发送数据到jetson nano上,那么PC端属于客户端,而jetson nano属于服务端,整个实现具体流程是:

  1. 分别安装SSH客户端与服务端
  2. 服务端启动SSH服务
  3. 客户端远程登录服务端
  4. 实现数据传输
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才会生效。可通过ifconfignetworkctl 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,可通过ifconfignetworkctl 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登录linuxWindow(客户端)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. 参考

感谢各位看到最后,若有帮助请帮忙点个👍

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐