SSH 连接到家庭计算机

TSp*_*ark 21 ssh networking port-forwarding

我家里有多台机器,我想从学校使用 SSH 和 VNC 访问它们。为了做到这一点,我给了他们静态 IP:

  • 192.168.1.50:Windows
  • 192.168.1.51:Ubuntu
  • 192.168.1.52:树莓派/Raspbian

我知道 SSH 使用端口 22,因此我可以将此端口转发到路由器上的 192.168.1.51:22,但这样我将无法通过 SSH 连接到我的 Raspberry Pi。有什么办法可以将其设置为能够访问两台机器?

Kaz*_*lfe 32

如果你有 IPv6,你甚至不需要端口转发!只需获取您的永久 IPv6 地址(基于您的 MAC 地址,因此可以保证保持不变,除非您的 ISP 不知道 IPv6 是如何工作的)并使用它来建立隧道。因为您的 IPv6 地址是面向公众的并允许世界无需通过本地 NAT 即可访问您,您无需费心在任何地方启用端口转发。它会“正常工作”。

但是请注意,IPv6 仍然在全球范围内并未真正得到支持,您的家庭互联网连接和远程互联网连接都需要具有完全可用的 IPv6 才能做到这一点。

但是,如果您像大多数人一样并且只有 IPv4,那么仍有办法!某些路由器允许您将特定的源端口转发到特定的目标端口,如下所示:

在此处输入图片说明

在这个例子中, port22被直接传递到我的机器sheepdog,而 port292被转发到 port 22on coyote

最后,如果您的路由器没有此功能,您可以更改端口,因为 SSH 不仅限于在 port 上运行22。您可以将其设置为您想要的任何内容(未使用)。

/etc/ssh/sshd_config(你需要 root 来编辑,所以sudo nano /etc/ssh/sshd_config),文件顶部有一行:

# What ports, IPs and protocols we listen for
Port 22
Run Code Online (Sandbox Code Playgroud)

将此更改为您想要的任何内容:

# What ports, IPs and protocols we listen for
Port 2992
Run Code Online (Sandbox Code Playgroud)

用 重启 SSH 服务器sudo service ssh restart,并转发路由器上的端口。


但是,对于这个用例,我会考虑 SSH 隧道是否是正确的做法。也许你应该在你的家庭网络上设置一个专用的 VPN 服务器?这将允许您从任何地方访问整个家庭网络,前提是您拥有 VPN 所需的适当安全凭证。此外,VPN 的开销略少;您通常只需要为一台机器转发一个端口。

  • 如果您的 ISP 不支持 IPv6,您可以使用 IPv6 隧道代理来获取 IPv6 地址。 (2认同)

小智 19

解决这个问题的一个简单方法是将路由器的不同端口映射到机器的端口 22。例如,您可以在路由器中进行以下设置(假设您的路由器有 IP 1.2.3.4

1. 1.2.3.4:22   --> ubuntu:22
2. 1.2.3.4:8888 --> raspberrypi:22
3. 1.2.3.4:9999 --> windows:22 (or some other port)
Run Code Online (Sandbox Code Playgroud)

然后在使用 ssh 时,通过键入指定要使用的端口

$ ssh <username>@<router ip> -p <your port>
Run Code Online (Sandbox Code Playgroud)

现在您应该能够连接到您的所有机器。


小智 11

如果您知道自己的一台计算机始终处于运行状态,则还可以将其用作 ssh 代理。

假设您为外部 IP 地址(即 myhome.dyndns.com 或其他)设置了域名,您要做的是在一台计算机上连接(假设树莓始终处于运行状态,并且您将端口从路由器转发到它),您的 ssh 连接将是:

school -->(路由器,这里是透明的)--> raspberry --> ubuntu 或 windows

现在,在学校的 ~/.ssh/config 中,添加以下行:

Host ubuntu 192.168.1.51
    Hostname ubuntu (change to match your setup)
    User myraspberryuser  (change it ;-) )
    IdentityFile ~/.ssh/id_rsa   (The path to your private key, on the school computer, better on an usb key if public computer)
    ForwardAgent yes
    RequestTTY yes
    ProxyCommand ssh -W %h:%p %r@myhome.dyndns.com
Run Code Online (Sandbox Code Playgroud)

然后连接:

ssh-add ~/.ssh/id_rsa # to do only once per session
ssh myuser@ubuntu (login without password)
Run Code Online (Sandbox Code Playgroud)

从现在开始,如果您输入 ssh ubuntu,计算机将首先连接到 raspberry,然后启动与 ubuntu 计算机的 ssh 会话。

我建议您,无论您选择转发哪个端口,都禁用 /etc/sshd.conf 中的密码以仅允许通过 ssh 密钥登录。这样,如果您在 raspberry 和 ubuntu 上设置密钥,使用参数“ForwardAgent”,您只需解锁密钥,然后无需密码即可连接。这样,即使机器人尝试在您的 ssh 上登录,由于您禁止密码登录,它们也永远无法登录。

奖励,这也适用于 scp,scp foo ubuntu:/tmp/foo 将使用相同的设置,无需更多参数。奖励2,这个设置在家里不需要任何改变,如果明天你和另一台电脑,只需在你的ssh配置中复制/粘贴代码,更改主机和ip,就可以了,不需要在路由器上打开一个新端口