【ROS2】高级:安全-确保跨机器的安全性

目标:使两台不同的机器安全地通信。

教程级别:高级

时间:5 分钟

内容

  • 背景

  • 创建第二个密钥库

  • 复制文件

  • 启动节点

背景

在继续之前,请确保您已完成设置安全教程。

之前的教程使用了同一台机器上的两个 ROS 节点,通过本地主机接口发送所有网络通信。 让我们将这种情况扩展到涉及多台机器,因为此时身份验证和加密的好处会变得更加明显。

假设在上一个演示中创建密钥库的机器具有主机名 Alice ,并且我们还希望使用另一台主机名为 Bob 的机器进行多机 talker/listener 演示。我们需要将一些密钥从 Alice 移动到 Bob ,以允许 SROS 2 对传输进行身份验证和加密。

创建第二个密钥库

首先 Bob 创建一个空的密钥库;密钥库实际上只是一个空的目录:

properties 复制代码
ssh Bob
mkdir ~/sros2_demo
exit

复制文件

talker 程序的密钥和证书从 Alice 复制到 Bob 。由于密钥只是文本文件,我们可以使用 scp 来复制它们。

ruby 复制代码
cd ~/sros2_demo/demo_keystore
scp -r talker USERNAME@Bob:~/sros2_demo/demo_keystore

这个命令 scp -r talker USERNAME@Bob:~/sros2_demo/demo_keystore 的各个部分及其作用:

  1. scp: 这是一个用于安全复制文件和目录的命令行工具。它使用SSH(安全外壳协议)进行数据传输,确保数据在传输过程中是加密的。

  2. -r: 这个选项告诉scp递归地复制目录及其内容。也就是说,它不仅复制目录本身,还复制目录中的所有文件和子目录。

  3. talker: 这是要复制的源目录的名称。在这个例子中,它指的是Alice机器上sros2_demo/demo_keystore目录下的talker子目录。

  4. USERNAME: 这是Bob机器上的用户名。你需要将USERNAME替换为实际的用户名。

  5. @Bob: 这部分指定了目标机器的主机名。在这里,BobBob机器的主机名。

  6. ~/sros2_demo/demo_keystore: 这是目标路径,即在Bob机器上复制文件的目的地。~代表当前用户的主目录,因此这个命令会将文件复制到Bob用户的主目录下的sros2_demo/demo_keystore目录中。

综合来看,这个命令的作用是:

  • Alice机器上的sros2_demo/demo_keystore目录中的talker子目录开始。

  • 递归地复制talker目录及其所有内容。

  • 将这些内容安全地传输到Bob机器上的sros2_demo/demo_keystore目录。

这个命令确保了Bob机器上也有必要的密钥和证书,从而可以与Alice机器进行安全通信。

警告

请注意,在这种情况下,整个密钥库在不同的机器之间共享,这可能不是期望的行为,因为它可能会导致安全风险。有关这方面的更多信息,请参阅部署指南。https://docs.ros.org/en/jazzy/Tutorials/Advanced/Security/Deployment-Guidelines.html

这会很快,因为它只是复制一些非常小的文本文件。现在,我们准备运行一个多机对话者/监听者演示!

启动节点

一旦环境设置完成,在 Bob 上运行 talker:

nginx 复制代码
export ROS_SECURITY_KEYSTORE=~/sros2_demo/demo_keystore
export ROS_SECURITY_ENABLE=true
export ROS_SECURITY_STRATEGY=Enforce
ros2 run demo_nodes_cpp talker --ros-args --enclave /talker_listener/talker

并在 Alice 上启动监听器:

nginx 复制代码
export ROS_SECURITY_KEYSTORE=~/sros2_demo/demo_keystore
export ROS_SECURITY_ENABLE=true
export ROS_SECURITY_STRATEGY=Enforce
ros2 run demo_nodes_py listener --ros-args --enclave /talker_listener/listener

在Bob机器上也需要设置这些环境变量,以确保ROS 2节点能够正确地使用安全功能。这些命令的作用如下:

  1. export ROS_SECURITY_KEYSTORE=~/sros2_demo/demo_keystore
  • 这个命令设置环境变量ROS_SECURITY_KEYSTORE,指向Bob机器上的密钥库目录。密钥库包含用于认证和加密通信的密钥和证书。通过设置这个环境变量,ROS 2节点知道在哪里查找这些密钥和证书。

export ROS_SECURITY_ENABLE=true

  • 这个命令启用ROS 2的安全功能。当设置为true时,ROS 2节点会要求所有通信都必须经过安全认证和加密。

export ROS_SECURITY_STRATEGY=Enforce

  • 这个命令设置安全策略为Enforce。这表示ROS 2将强制执行安全策略,任何不满足安全要求的通信都将被拒绝。

爱丽丝现在将收到鲍勃发送的加密消息。

通过使用加密和认证成功通信的两台机器,您可以使用相同的程序将更多的机器添加到您的 ROS 图中。

相关推荐
岁岁的O泡奶几秒前
DVWA_Vulnerability: Command Injection
经验分享·安全·web安全
偶像你挑的噻6 分钟前
12-Linux驱动开发- SPI子系统
linux·驱动开发·stm32·嵌入式硬件
酷柚易汛智推官12 分钟前
Fastlane赋能移动研发:从全流程自动化到工程效能升级
运维·自动化·酷柚易汛
落798.18 分钟前
Genlogin × Bright Data,一键解锁自动化采集的高成功率方案
运维·自动化·数据采集·亮数据
羑悻的小杀马特28 分钟前
轻量跨云·掌控无界:Portainer CE + cpolar 让远程容器运维像点外卖一样简单——免复杂配置,安全直达对应集群
运维·网络·安全·docker·cpolar
松涛和鸣31 分钟前
16、C 语言高级指针与结构体
linux·c语言·开发语言·数据结构·git·算法
L***865341 分钟前
Failed to restart nginx.service Unit nginx.service not found
运维·nginx
念风1 小时前
[lvgl]如何优雅地向lv_port_linux中添加tslib支持
linux
悦悦欧呐呐呐呐1 小时前
数据库事务是什么,怎么用的
服务器·数据库·oracle
自由的好好干活2 小时前
使用Qoder编写ztdaq的C#跨平台示例总结
linux·windows·c#·qoder