8.5.3 控制系统实现_ssh远程连接
在多处理器的分布式架构中,不同的ROS系统之间可能会频繁的涉及到文件的传输,比如:
我们在PC端编写ROS程序,而最终需要在树莓派上运行,如何将相关目录以及文件从PC上传到树莓派?
SSH 是常用手段之一。
概念
SSH(Secure Shell)是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时,SSH都会自动对其进行加密。数据到达目的地时,SSH自动对加密数据进行解密。整个过程都是透明的,使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。
实现
SSH实现架构上分为客户端和服务器端两大部分,客户端是数据的发送方,服务端是数据的接收方,当前场景下,我们需要从PC端发送数据到树莓派,那么PC端属于客户端,而树莓派属于服务端,整个实现具体流程是:
- 分别安装SSH客户端与服务端
- 服务端启动SSH服务
- 客户端远程登陆服务端
- 实现数据传输
1.安装SSH客户端与服务端
默认情况下,Ubuntu系统已经安装了SSH客户端,因此只需要在树莓派安装服务端即可(如果树莓派安装的是服务版的Ubuntu,默认会安装SSH服务并已设置成了开机自启动):
sudo apt-get install openssh-server
如果客户端需要自行安装,那么调用如下命令:
sudo apt-get install openssh-client
2.服务端启动SSH服务
树莓派启动 ssh 服务:
sudo /etc/init.d/ssh start
启动后查看服务是否正常运行:
ps -e | grep ssh
如果启动成功,会包含 sshd 与 ssh 两个程序。
以后需要频繁的使用ssh登录树莓派,为了简化实现,可以将树莓派的ssh服务设置为开机自启动,命令如下:
sudo systemctl enable ssh
3.客户端远程登陆服务端
登陆树莓派可以调用如下命令:
ssh 账号@ip地址
然后根据提示,录入登陆密码,即可成功登陆。
如果退出登陆,可以调用exit命令:
exit
4.实现数据传输
上传文件:
scp 本地文件路径 账号@ip:树莓派路径
上传文件夹:
scp -r 本地文件夹路径 账号@ip:树莓派路径
下载文件:
scp 账号@ip:树莓派路径 本地文件夹路径
下载文件夹:
scp -r 账号@ip:树莓派路径 本地文件夹路径
使用优化
每次登陆树莓派时,都需要输入密码,使用不方便,可以借助密钥简化登陆过程,实现免密登陆,提高操作效率,实现思想是:生成一对公钥私钥,私钥存储在本地,公钥上传至服务器,每次登陆时,本地直接上传私钥到服务器,服务器有匹配的公钥就认为是合法用户,直接创建SSH连接即可。具体实现步骤只有两步:
- 本地生成密钥对
- 将公钥上传至树莓派
1.生成密钥对
本地客户端生成公私钥:(一路回车默认即可)
ssh-keygen
上面这个命令会在用户目录.ssh文件夹下创建公私钥:
- id_rsa (私钥)
- id_rsa.pub (公钥)
2.将公钥上传至树莓派
上传命令:
ssh-copy-id -i ~/.ssh/id_rsa.pub 账号@ip
上面这条命令是写到服务器上的ssh目录下,该目录下有文件authorized_keys保存了公钥内容。
以后再登陆树莓派就无需录入密码了。