1 前言

鸿蒙 PC 内置了 ssh 客户端,但并未内置 ssh 服务端。

在一些场景下,我们可能会想要在鸿蒙 PC 上运行 ssh 服务端。例如:

  1. 多人协作开发项目,而设备数量不足。一个团队需要基于鸿蒙 PC 开展一些命令行程序方面的开发工作,但由于鸿蒙 PC 设备数量有限,做不到人手一台。此时如果能通过 ssh 来共享设备,就可以缓解设备短缺的问题。
  2. 正在搭建 CI 系统或自动化测试系统,需要在服务器上面控制鸿蒙 PC 执行命令。对于这种场景,除了在鸿蒙 PC 上面直接运行 CI 系统的 Agent 程序以外,通过 ssh 来远程操控设备也可以作为一种解决方案。

考虑到这类诉求的存在,我对 openssh 进行了完整的鸿蒙适配(里面的 sshd 也在适配范围内),让 sshd 得以在 HiShell 应用沙箱环境中运行。

本文将介绍如何使用鸿蒙适配版本的 sshd,并扩展讲解如何通过内网穿透工具将 ssh 服务暴露到公网供远程用户接入。

2 安装 openssh

我已经将完整适配的 openssh 录入到了 Harmonybrew 中。用户只需要安装 Harmonybrew,便可通过一条命令安装完整版的 openssh。

安装 Harmonybrew 的操作请参考 社区文档

安装 openssh 的命令:

brew install openssh

安装完毕后请注意阅读 Homebrew 包管理器打印出来的 Caveats。我在里面写了一些注意事项,例如只支持公钥认证、远程会话的权限继承当前用户(HiShell 沙箱用户)的权限等。

3 启动 sshd 服务

指定一个自定义端口(不能使用 22),拉起 sshd:

sshd -p 8022

此时,同一局域网内的其他设备已经可以通过 ssh 连接你的鸿蒙 PC 了。只要把 ssh 公钥配置好,这些设备就能免密码登陆到鸿蒙 PC 上。

由于我们是在 HiShell 沙箱内、以沙箱用户身份启动 sshd,因此远程会话登陆进来也是位于 HiShell 环境中。

4 分享给远程用户

绝大多数用户的鸿蒙 PC 并不拥有公网 IP。如果我们想将我们的设备共享给远程用户,我们需要使用内网穿透工具将 sshd 服务暴露到公网。

这里以 rathole 这个内网穿透工具为例,对操作流程进行演示。

4.1 配置 rathole 服务端

首先准备一台拥有公网 IP 的云服务器,在上面安装 rathole。

以 Ubuntu 24.04 x64 为例,安装命令是这样的:

# 1. 从 GitHub 下载制品
curl -L -o /tmp/rathole-x86_64-unknown-linux-gnu.zip https://github.com/rathole-org/rathole/releases/download/v0.5.0/rathole-x86_64-unknown-linux-gnu.zip

# 2. 解压(如果没有 unzip 顺手装一个:sudo apt install unzip)
unzip /tmp/rathole-x86_64-unknown-linux-gnu.zip -d /usr/local/bin

# 3. 检查是否安装成功
rathole --version

安装完成后,创建一个配置文件 server.toml,内容如下

[server]
# rathole 通信端口
bind_addr = "0.0.0.0:2333"

[server.services.my_pc_ssh]
# token 可以用这个命令生成:openssl rand -hex 16
token = "your_secure_token_here"
# 需要对公网暴露的端口
bind_addr = "0.0.0.0:10022"

最后启动 rathole 服务端:

rathole -s server.toml

注意:各大云厂商默认是不会给云服务器放行 2333 和 10022 端口的。配置完成后需要去云厂商的控制台检查安全组配置,确保这两个端口已经对 0.0.0.0 或者对你指定的白名单 IP 放行。

4.2 配置 rathole 客户端

鸿蒙 PC 作为被穿透的一方,也要安装 rathole。

由于 rathole 官方并未发布鸿蒙版,我们需要使用 Harmonybrew 提供的版本:

brew install rathole

安装完成后,创建一个配置文件 client.toml,内容如下

[client]
# 云服务器的 IP 和 rathole 通信端口(1.2.3.4 替换成你云服务器的公网 IP)
remote_addr = "1.2.3.4:2333"

[client.services.my_pc_ssh]
# token 必须与服务端一致
token = "your_secure_token_here"
# 本机的 sshd 端口
local_addr = "127.0.0.1:8022"

最后启动 rathole 客户端:

rathole -c client.toml

4.3 使用公网 IP 连接鸿蒙 PC

当我们按照上述配置部署好 rathole 之后,当远程用户执行 ssh -p 10022 ohos@1.2.3.4,服务器上的 rathole 就会把 ssh 连接转发到鸿蒙 PC 的 8022 端口上。

只要正确配置了 ssh 公钥,其他人就可以像操作远程服务器一样,操作你的鸿蒙 PC。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐