Home Assistant 与 SSH
大多数系统工程师都非常熟悉 SSH (Secure shell)。这个工具由服务端和客户端两部分组成,用于以安全的方式访问远程系统。如果你正在运行 Home Assistant,但又不想把它直接暴露在公网中,它同样能帮上忙。在 Linux 系统上,SSH 通常默认可用。如果你使用的是 Windows 安装,则需要额外步骤,而这些内容不在本文讨论范围内。
在这篇博客文章中,我们将使用 SSH 的隧道功能来建立一条安全连接,并把 Home Assistant 前端转发到本地系统。
涉及的双方如下:
- 远程系统:运行 Home Assistant 的地方,通常位于你的家庭网络中。
- 本地系统:你想查看前端的设备。
前提条件是,你需要在路由器上把 22 端口转发到家庭网络中运行 Home Assistant 的那台设备。你可能还需要在远程系统上通过 $ sudo systemctl start sshd 启用 SSH 守护进程,并调整主机防火墙设置。如果你运行的是 Hass.io,那就启用 SSH Server add-on。你还必须具备一个公网 IP 地址或主机名,这可以通过动态 DNS 提供(例如 NO-IP 或 DuckDNS)。
在本地系统上,你只需要一个 SSH 客户端,并且你所在的网络允许 SSH 连接即可。
先来看一下我们要使用的命令。更多信息可以通过 man ssh 获取。
一个可能的示例如下。
第一次建立连接时,你需要接受指纹。
现在你就可以在本地系统上使用前端了:http://localhost:8000
需要记住的几点:
- 如果你想通过互联网使用它,就需要公网 IP 地址或主机名(动态 DNS 也可以)。
- 你需要在路由器上设置端口转发。
- 不要允许
root使用 SSH。请在远程系统上设置PermitRootLogin no。 - 本地端口必须大于 1024。只有
root才能转发 1024 以下的特权端口。 - 使用 SSH keys for authentication 而不是密码,以避免暴力破解攻击。

