一.SSH简介
SSH是一种网络协议,用于计算机之间的加密通讯,即我们可以在一台计算机上通过SSH协议登陆另一台计算机,并对其进行操作。作者在这里使用的是SSH在Ubuntu中的免费开源实现,通过SSH协议访问ROS小车,并实现远程的Rviz。
说明:在帖子中只有SSH的账号密码登陆。
(以下是比较官方的说法)Secure Shell(缩写为 SSH),由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为一项创建在应用层和传输层基础上的安全协议,为计算机上的 Shell(壳层)提供安全的传输和使用环境。最初的 SSH 协议是由芬兰的一家公司的研究员 Tatu Ylönen 于 1995 年设计开发的,但是因为受版权和加密算法等等的限制,现在很多人都转而使用 OpenSSH。OpenSSH 是 SSH的替代软件包,而且是开放源代码和免费的。
二.准备工作
1)服务端与客户端
在通过SSH访问ROS小车系统前,我们需要搞清楚服务端与客户端的概念。
服务端:ROS小车
客户端:我们的ubuntu电脑
(以下为一些定义,赶时间请跳过)
服务端指提供服务的一端。它会等待客户端的访问,并为其提供服务。服务端一般是 sshd 进程,提供了对远程连接的处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接。
客户端指面向用户的一端。它会向服务端发出连接请求,服务端响应请求,两者建立连接。
2)ip地址
在进行SSH连接前,我们需要知道服务端与客户端的ip地址。通过以下命令进行查看。
ifconfig
例如,我的ROS小车(服务端)ip地址为192.168.43.198,ubuntu电脑(客户端)ip地址为192.168.43.114。
三.安装SSH
1)服务端安装
需要在ROS小车安装服务端
sudo apt-get install openssh-server
2)客户端安装
一般Ubuntu系统默认自动安装有SSH客户端,因此大家根据需求在自己的ubuntu安装客户端。
sudo apt-get install openssh-client
3)检查是否安装完成
dpkg -l | grep ssh
4)其他SSH指令
启动ssh服务:sudo /etc/init.d/ssh start
关闭ssh服务:sudo /etc/init.d/ssh stop
重启ssh服务:sudo /etc/init.d/ssh restart
四.SSH连接(帐号密码)
ssh 服务端id@服务端ip地址
例如:我的小车id为nano,ip地址为192.168.43.198,那么我的命令为:
ssh nano@192.168.43.198
SSH默认端口号为22,如果需要更改,请按照以下操作:
(1)服务端更改端口号
gedit /etc/ssh/sshd_config
修改15行 #Port 22 值为端口号,然后重启SSH
sudo /etc/init.d/ssh restart
(2)客户端运行指令
ssh -p 端口号 服务端id@服务端ip地址
问题:
连接报错
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:6zKiuPSPE90dB6PNCj1fICgA1DTrTxPFiVbl82+sS0E.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending RSA key in /root/.ssh/known_hosts:4
RSA host key for has changed and you have requested strict checking.
Host key verification failed.
解决办法:运行指令打开know_hosts文件,并清空know_hosts中的数据
sudo gedit /home/.ssh/knows_hosts
报错原因: 服务器的公钥(public key)发生了变化(比如重装了系统或重装了openssh服务),而客户端存储的信息没有发生变化。
五.SSH运行导航并远程使用Rviz
注意:首先要确保自己的ubuntu电脑有ROS,并可以正常启动
(1)修改服务端.bashrc文件(ROS小车)
gedit ~/.bashrc
在后面加上
export ROS_HOSTNAME=服务端ip
export ROS_MASTER_URI=http://服务端ip:11311
(2)修改客户端.bashrc文件(自己的ubuntu电脑)
gedit ~/.bashrc
在后面加上
export ROS_HOSTNAME=客户端ip
export ROS_MASTER_URI=http://服务端ip:11311
例如我的电脑是这样 :
(3)运行导航
注意:导航中不能自动开启rviz节点
客户端(自己的ubuntu电脑)通过SSH远程连接服务端(ROS小车),并启动导航相关的节点。
(4)开启Rviz
客户端(自己的ubuntu电脑)直接开启Rviz,注意不是在连接SSH后开启Rviz,导入导航的rviz文件,选择各部分订阅话题即可。