在鸿蒙 PC 上运行 sshd 服务并将设备分享给远程用户
1 前言
鸿蒙 PC 内置了 ssh 客户端,但并未内置 ssh 服务端。
在一些场景下,我们可能会想要在鸿蒙 PC 上运行 ssh 服务端。例如:
- 多人协作开发项目,而设备数量不足。一个团队需要基于鸿蒙 PC 开展一些命令行程序方面的开发工作,但由于鸿蒙 PC 设备数量有限,做不到人手一台。此时如果能通过 ssh 来共享设备,就可以缓解设备短缺的问题。
- 正在搭建 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。
更多推荐




所有评论(0)