我家里有多台机器,我想使用 SSH 和 VNC 从学校访问它们。为了做到这一点,我给了他们静态 IP:
- 192.168.1.50:窗户
- 192.168.1.51:Ubuntu
- 192.168.1.52:树莓派/Raspbian
我知道 SSH 使用端口 22,所以我可以将此端口转发到路由器上的 192.168.1.51:22,但这样我将无法通过 SSH 连接到我的 Raspberry Pi。有什么方法可以设置它以访问两台机器?
我家里有多台机器,我想使用 SSH 和 VNC 从学校访问它们。为了做到这一点,我给了他们静态 IP:
我知道 SSH 使用端口 22,所以我可以将此端口转发到路由器上的 192.168.1.51:22,但这样我将无法通过 SSH 连接到我的 Raspberry Pi。有什么方法可以设置它以访问两台机器?
如果你有 IPv6,你甚至不需要端口转发!只需获取您的永久 IPv6 地址(基于您的 MAC 地址,因此除非您的 ISP 不知道 IPv6 的工作原理,否则它可以保证保持不变)并使用它来隧道。因为您的 IPv6 地址是面向公众的并且允许世界无需通过本地 NAT 即可访问您,您无需费心在任何地方启用端口转发。它会“正常工作”。
但是请注意,IPv6 仍然没有在全球范围内得到真正的支持,您的家庭互联网连接和远程互联网连接都需要具有完全工作的 IPv6 才能做到这一点。
但是,如果您像大多数人一样只有 IPv4,那还是有办法的!一些路由器允许您将特定的源端口转发到特定的目标端口,如下所示:
在这个例子中, port
22
直接传递给我的机器sheepdog
,而 port292
被转发到 port22
oncoyote
。最后,如果您的路由器没有此功能,您只需更改端口即可,因为 SSH 不仅限于在端口上运行
22
。您可以将其设置为您想要的任何内容(未使用)。在
/etc/ssh/sshd_config
(您需要 root 才能编辑,所以sudo nano /etc/ssh/sshd_config
)中,文件顶部有一行:将其更改为您想要的任何内容:
重启 SSH 服务器
sudo service ssh restart
,并转发路由器上的端口。但是,对于这个用例,我会考虑 SSH 隧道是否是正确的做法。也许您应该在您的家庭网络上设置一个专用的 VPN 服务器?这将允许您从任何地方访问您的整个家庭网络,前提是您拥有 VPN 所需的适当安全凭证。此外,VPN 的开销略少;您通常只需要为一台机器转发一个端口。
解决此问题的一种简单方法是将路由器的不同端口映射到计算机的端口 22。例如,您可以在路由器中进行以下设置(假设您的路由器有 IP
1.2.3.4
)然后当您使用 ssh 时,通过键入指定要使用的端口
现在您应该能够连接到所有机器。
如果您知道您的一台计算机始终处于运行状态,那么您也可以将其用作 ssh 代理。
假设您为您的外部 IP 地址设置了域名(即 myhome.dyndns.com 或其他),您将要做的是连接一台计算机(假设树莓派始终处于启动状态,并且您将端口从路由器转发到它),您的 ssh 连接将是:
学校 --> (路由器,这里是透明的)--> raspberry --> ubuntu 或 windows
现在,在学校的 ~/.ssh/config 中,添加以下行:
然后连接:
从现在开始,如果您键入 ssh ubuntu,计算机将首先连接到 raspberry,然后启动与 ubuntu 计算机的 ssh 会话。
无论您选择转发哪个端口,我都建议您禁用 /etc/sshd.conf 中的密码,以仅允许通过 ssh 密钥登录。这样,如果您在 raspberry 和 ubuntu 上设置密钥,使用参数“ForwardAgent”,您只需解锁密钥,然后无需密码即可连接。这样,即使机器人试图登录您的 ssh,它们也将永远无法登录,因为您不允许密码登录。
奖励,这也适用于 scp,scp foo ubuntu:/tmp/foo 将使用相同的设置而无需进一步的参数。Bonus 2,这个设置不需要在家里做任何改变,如果明天你和另一台电脑,只需复制/粘贴你的 ssh 配置中的代码,更改主机和 ip,就可以了,无需在路由器上打开新端口
我这样做——我一直保持 rpi 并直接插入路由器(因为它运行起来最便宜),然后 ssh 进入它,然后从它反弹到其他路由器——它从来不需要太多关注。
也可以通过 ssh 管道来 VNC/RDP 一个 GUI,这很有趣,或者转发一个端口,让您可以浏览到桌面计算机上的服务器,同时保持它的私密性。
我添加这个答案的原因是给你一些建议。
1) 使用与 22 不同的端口。您可以在 PI 上将其保留为 22,但将路由器上的传入端口更改为超过 10,000... 否则您每天将受到数十到数百次攻击 - 一旦您'已知在发现漏洞后第二次运行 SSH 主机,你就拥有了。
2) 使用证书而不是用户名/密码——完全禁用用户名/密码登录。
3)如果您的 IP 地址可以更改,请使用 dyndns 类型的服务为自己获取 DNS hosthame(我使用 noip,它是免费的,并且他们支持 Linux 客户端来更新您的 IP 地址——我认为您可以轻松启动它现在的 pi)。还有一些其他公司免费提供此服务。
4) 使您的 pi(或您 ssh 进入的任何内容)保持最新(sudo apt-get update)。我相信 ssh 现在已经得到很好的审查,但我也相信 https ......
怀疑这是否更适合作为评论而不是答案,但无论如何我都会在这里发布。
在执行此操作之前,您应该考虑一些事情: