内网中的 Web 服务可能监听在服务器的 127.0.0.1:50052,当前电脑既不能直接访问这台服务器,也不应该把这个服务暴露到公网。 如果当前电脑可以登录跳板机 192.0.2.10:22022,跳板机又可以访问目标服务器 198.51.100.20,就可以用 SSH 本地端口转发,把目标服务器上的服务临时映射到当前电脑。 本文中的账号和地址都是脱敏示例:跳板机使用 jump-user@192.0.2.10:22022,目标服务器使用 target-user@198.51.100.20。请替换为实际环境的值。 建立隧道: ssh -fN \ -J jump-user@192.0.2.10:22022 \ -L 50052:127.0.0.1:50052 \ -o ExitOnForwardFailure=yes \ target-user@198.51.100.20 然后在浏览器中打开这个内网页面: http://127.0.0.1:50052/ 对浏览器来说,内网 Web 服务就在本机;对内网 Web 服务来说,请求来自目标服务器上的 SSH 连接。 完整链路 这条命令建立的是下面这条 TCP 链路: 本地 浏览器 -> 本地 127.0.0.1:50052 -> SSH 本地端口转发 -> 跳板机 192.0.2.10:22022 -> 目标服务器 198.51.100.20 -> 目标服务器 127.0.0.1:50052 -> 内网 HTTP 服务 这里有两个 127.0.0.1:50052,但它们不是同一个地址: -L 左侧的 50052 是当前电脑上的监听端口 -L 右侧的 127.0.0.1:50052 是目标服务器视角下的地址 127.
Read more有些服务器不能从办公电脑直接访问,但可以先登录一台跳板机,再由跳板机访问内网目标服务器。 最直接的做法是先登录跳板机,再在跳板机上执行第二次 ssh。不过 SSH 自己就支持这条链路,使用 -J(ProxyJump)可以把两次连接写成一条命令。 假设网络关系如下: 当前电脑 └── SSH ──> 跳板机 192.0.2.10:22022 └── SSH ──> 目标服务器 198.51.100.20:22 本文中的账号和地址都是脱敏示例:跳板机使用 jump-user@192.0.2.10:22022,目标服务器使用 target-user@198.51.100.20。请替换为实际环境的值。 当前电脑不能直接访问 198.51.100.20,但跳板机可以访问它。连接目标服务器只需要: ssh -J jump-user@192.0.2.10:22022 target-user@198.51.100.20 -J 到底做了什么 这条命令中有两个 SSH 地址: ssh -J jump-user@192.0.2.10:22022 \ target-user@198.51.100.20 它们的角色不同: -J jump-user@192.0.2.10:22022:先连接跳板机,用户名是 jump-user,SSH 端口是 22022 target-user@198.51.100.20:最终要登录的目标服务器,未指定端口时使用默认的 22 -J 的格式是: -J [跳板机用户@]跳板机地址[:跳板机端口] 如果目标服务器的 SSH 端口不是 22,使用 -p 指定目标端口: ssh -J jump-user@192.0.2.10:22022 \ -p 2222 \ target-user@198.51.100.20 这里的 -p 2222 属于目标服务器;跳板机的端口仍然写在 -J 后面。 连接过程 执行命令后,本地 SSH 客户端会做两件事:
Read more用三个步骤完成两台宿主机上的 ROS 2 Docker 容器通信:检查网络、启动容器,并验证 /cross_server_test 的双向收发。
这篇文章介绍如何从 macOS 连接 Ubuntu 远程桌面,尤其适合没有物理显示器、默认只有命令行环境的 Ubuntu 服务器。 本文使用的方案是: 客户端:macOS 服务端:Ubuntu 24.04 桌面环境:XFCE 远程桌面:NoMachine SSH 用来完成服务端安装和故障排查,真正承载远程桌面会话的是 NoMachine 的 NX 协议。 准备 Ubuntu 账号 先通过 SSH 登录 Ubuntu,并确认系统版本、处理器架构和当前用户: lsb_release -a dpkg --print-architecture whoami 常见的 x86 服务器架构为: amd64 下载 NoMachine 时,需要选择与服务器架构匹配的 DEB 安装包。 后文用 ubuntu-user 表示登录 Ubuntu 桌面的用户。执行命令时,将它替换成真实用户名。 安装 XFCE 桌面 如果 Ubuntu 只有命令行环境,先安装相对轻量的 XFCE: sudo apt update sudo apt install -y xfce4 xfce4-goodies dbus-x11 安装过程中如果出现显示管理器选择界面,保持默认选项即可。NoMachine 创建虚拟桌面不依赖物理显示器。 确认 XFCE 已经安装: command -v startxfce4 ls /usr/share/xsessions/ 正常情况下,可以看到类似结果:
Read more从系统版本检查、软件源配置到 Desktop/Base 安装和 Talker/Listener 验证,完整介绍如何在 Ubuntu 24.04 中安装 ROS 2 Jazzy。
这篇只解决三个问题: 输入命令时,根据历史记录给出自动补全提示 按 Tab 时,补全更多命令、参数和子命令 输入命令时,实时显示语法高亮 用到三个插件: zsh-autosuggestions zsh-completions zsh-syntax-highlighting 下面每个插件单独安装、单独配置。只需要哪个,就看哪个章节。 准备 zsh 插件目录 先创建一个统一的插件目录: mkdir -p ~/.zsh/plugins 后面的插件都会安装到这个目录下。 安装 zsh-autosuggestions zsh-autosuggestions 用来根据历史命令给出输入提示。 比如你以前执行过: ssh -p 2222 ops@203.0.113.10 下次输入 ssh 时,终端可能会用灰色文字提示后半段命令。按右方向键可以接受提示。 安装插件: git clone https://github.com/zsh-users/zsh-autosuggestions.git \ ~/.zsh/plugins/zsh-autosuggestions 然后在 ~/.zshrc 中加入: source ~/.zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh 如果想让提示颜色更淡一点,可以继续加入: ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8' 重新加载配置: source ~/.zshrc 验证方式: history | tail 找一条历史命令,输入它的前几个字符。如果后面出现灰色提示,说明插件已经生效。 安装 zsh-completions zsh-completions 用来增强 zsh 的 Tab 补全规则。 它和 zsh-autosuggestions 不一样: zsh-autosuggestions 是根据历史命令给输入提示 zsh-completions 是让 Tab 补全认识更多命令、参数和子命令 安装插件:
Read more在已有 Isaac ROS 环境中接入 Orbbec DaBai:先在 Ubuntu 主机确认设备,再到容器内安装 Orbbec ROS 2 驱动、启动节点并检查图像 topic。
很多服务器不能直接访问互联网。常见原因不是机器坏了,而是它处在内网、受出口策略限制,或者云上环境没有配置公网出口。 这时很多人的第一反应是:给服务器装代理、改防火墙、开公网出口、加 NAT 网关。 这些办法都可以,但它们改变的是服务器所在网络的出口结构。权限不够时,往往做不了;临时排障时,也太重。 还有一种更轻的办法:如果你的客户端机器已经能访问互联网,并且本地已经有一个代理端口,比如 127.0.0.1:10808,就可以用 SSH 反向端口转发,把这个代理能力挂到服务器上。服务器访问自己的 127.0.0.1:18080,实际流量会穿过 SSH 隧道,转到客户端的 127.0.0.1:10808。 先假设有这样一组配置: 服务器地址:203.0.113.10 服务器 SSH 端口:2222 服务器 SSH 用户:ops 客户端本地代理地址:127.0.0.1 客户端本地代理端口:10808 服务器侧代理入口:127.0.0.1:18080 基于这组配置,核心命令如下: ssh -p 2222 \ -R 18080:127.0.0.1:10808 \ ops@203.0.113.10 这条命令的重点在 -R。 这条命令真正做了什么 先看完整结构: ssh -p 2222 \ -R 18080:127.0.0.1:10808 \ ops@203.0.113.10 含义是: -p 2222:连接服务器 203.0.113.10 的 SSH 端口 2222 ops@203.0.113.10:以用户 ops 登录服务器 -R 18080:127.0.0.1:10808:在服务器侧监听 18080,并把连接转发到客户端侧的 127.0.0.1:10808 连接建立后,链路变成这样: 服务器上的程序 -> 127.0.0.1:18080 -> SSH 反向隧道 -> 客户端 127.0.0.1:10808 -> 客户端本地代理 -> 互联网 注意,这不是让客户端访问服务器的端口,而是让服务器借用客户端的端口。
Read more记录在 macOS 上通过 PyCharm 连接远程 Ubuntu GPU 主机开发 Isaac ROS 的推荐环境结构、配置步骤、调试方式与常见坑。
本文记录如何在 Amazon Lightsail 上搭建 WireGuard VPN,并使用 macOS 客户端连接。示例使用 Debian 13 (Trixie),VPN 网段使用 10.66.66.0/24,WireGuard 监听 UDP 58222。 适用场景 需要一个轻量、配置简单的个人 VPN 使用 Amazon Lightsail VPS 作为公网入口 macOS 通过 WireGuard 官方客户端连接 希望所有流量都走 VPN,或者只让指定网段走 VPN 一、Lightsail 准备 1. 创建 Lightsail 实例 建议配置: 项目 建议值 Platform Linux/Unix Blueprint Debian 13 (Trixie) Plan 1 GB 内存以上 Storage 8 GB 以上 Public IP 建议绑定 Lightsail Static IP 如果只是个人使用,最低配通常已经足够。建议创建后立即绑定 Static IP,避免实例 stop/start 后公网 IP 变化。 2. 配置 Lightsail 防火墙 在 Lightsail 实例页面进入:
Read more