如何在家庭网络内的计算机上 ssh

问题描述

我正在运行一个安装了 ddwrt 路由器的家庭网络。 我可以从家庭网络ssh到路由器,我可以从家庭网络内部ssh到pc,我可以从家庭网络外部ssh到路由器(静态公共ip)。 现在我想从家庭网络外部在我的电脑中 ssh,据我所知,要做到这一点,我需要创建一个 ssh 隧道。我正在使用以下命令:

ssh -L bbbb:hoomepcip:22 root:externalip

这样做后,我打开另一个终端,然后我

ssh homepcusername@externalip -p bbbb

但它不起作用,我做错了什么

一个命令不是应该在路由器中进行端口转发,所以我在 bbbb 端口上发送到它的外部 ip 的所有内容都会转到我家用电脑的 22 个吗?

现在我在路由器 gui 上做了一个永久端口转发,但我不想使用它并在需要 ssh 时打开端口。

路由器和电脑都安装了SSH服务器,路由器有dropbear pc openssh

解决方法

我找到了适合我的解决方案。 因此,正如我所说,我需要一种通过路由器从网络外部 ssh 进入我的电脑的方法。 首先打开一个终端窗口并输入

ssh -L bbbb:homepcIP:cc myrouterusername@mywanip -p aa 

这会将您连接到路由器并将端口 bbbb(从 1024-60000 中选择一个数字)转发到您电脑中的 cc(通常为 22) 输入密码并保持打开状态

然后打开一个新的终端窗口并输入

ssh pcUSERNAME@localhost -p bbbb

bbbb 在这种情况下可以是您选择的任何端口号(最好在 1024 以上,并且最大限制为 60000ish)

cc 和 bb 是 ssh 服务器的端口(我的电脑的 cc 和路由器的 bb,它们通常是 22,但它可以根据配置而改变)

这里的关键是“localhost”,我总是在那里输入我的 pc ip,但您必须输入 localhost,它才能正确连接到 pc。

你还必须在第一台服务器中启用 SSH TCP 转发

,

您可以考虑使用 tailscale,而不是 SSH 隧道。

参见例如“How to secure an Ubuntu server using Tailscale and UFW”,它将限制 ssh 访问仅通过 Tailscale,并使用 UFW(简单防火墙)限制到您的服务器的非 Tailscale 流量。
这将为您提供可用于 SSH 的 Tailscale IP 地址(以 100.x.y.z 开头),而您的公共互联网 IP 不允许 SSH。
然后,您可以根据需要添加 MFA (multi-factor auth)

其他示例:来自 How to Setup SSH using Tailscale or Ngrok 的“Ibrahim Jarif”。