AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 827229
Accepted
TSpark
TSpark
Asked: 2016-09-20 19:02:59 +0800 CST2016-09-20 19:02:59 +0800 CST 2016-09-20 19:02:59 +0800 CST

SSH 到家用电脑

  • 772

我家里有多台机器,我想使用 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。有什么方法可以设置它以访问两台机器?

networking
  • 5 5 个回答
  • 10678 Views

5 个回答

  • Voted
  1. Best Answer
    Kaz Wolfe
    2016-09-20T19:18:32+08:002016-09-20T19:18:32+08:00

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

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

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

    在此处输入图像描述

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

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

    在/etc/ssh/sshd_config(您需要 root 才能编辑,所以sudo nano /etc/ssh/sshd_config)中,文件顶部有一行:

    # What ports, IPs and protocols we listen for
    Port 22
    

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

    # What ports, IPs and protocols we listen for
    Port 2992
    

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


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

    • 33
  2. Liu Siyuan
    2016-09-20T22:28:21+08:002016-09-20T22:28:21+08:00

    解决此问题的一种简单方法是将路由器的不同端口映射到计算机的端口 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)
    

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

    $ ssh <username>@<router ip> -p <your port>
    

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

    • 19
  3. potens
    2016-09-21T06:47:43+08:002016-09-21T06:47:43+08:00

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

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

    学校 --> (路由器,这里是透明的)--> 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
    

    然后连接:

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

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

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

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

    • 11
  4. Bill K
    2016-09-21T09:09:29+08:002016-09-21T09:09:29+08:00

    我这样做——我一直保持 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 ......

    • 4
  5. BlueCacti
    2016-09-21T02:25:08+08:002016-09-21T02:25:08+08:00

    怀疑这是否更适合作为评论而不是答案,但无论如何我都会在这里发布。

    在执行此操作之前,您应该考虑一些事情:

    1. 您将向 Internet 开放您的系统,因此您最好确保它们已打好补丁并且您的安全配置已得到强化(例如,不允许 root 登录并使用 pubkeys 而不是密码)。
    2. 您的公共 IP(请参阅 whatismyip.com)可能会发生变化,具体取决于您的 ISP,它可能每天或几乎从不发生变化。这意味着您必须找到一种方法来确定您的公共 IP。您可以每天从您的家庭网络访问 whatismyip.com,创建一些应用程序,或使用动态 DNS (DynDNS) 将您不断变化的公共 IP 映射到静态域名。
    3. 如果您想使用 IPv6 来绕过与 IPv4 和 NATing 相关的所有麻烦,您将需要您的设备、路由器、ISP ......也与 IPv6 通信。当您的 ISP 不支持 IPv6 时,有一些服务可以为您提供帮助,但无论如何您的设备和路由器都必须进行通信。
    4. 您向互联网开放的端口和设备越多,您的攻击区域就越大。我建议在您的网络中使用跳转盒,并且只允许从互联网通过 SSH 访问该设备。Jump-box 基本上是一个非常坚固的系统,您可以通过路由器将其端口转发到 Internet。一旦连接到那个盒子,你就可以通过它通过 SSH 连接到你的内部网络。跳箱基本上可以是另一个树莓派。我建议使用专用设备,以便能够尽可能地强化它(其中包括运行尽可能少的服务)。
    5. (4a) 您可以设置一个 VPN 服务器,而不是让您通过 SSH 连接到一个跳转盒,该服务器允许您在学校从您的设备浏览您的家庭网络(如果允许出站 VPN 连接)。
    • 3

相关问题

  • 如何设置 VLAN 转发?

  • 如何将主机 Ubuntu 上的 VPN (tun0) 网络适配器映射到 VirtualBox 来宾 Windows?

  • 如何限制下载/上传带宽?

  • 如何通过 Windows 网络共享文件?

  • 面板小程序以文本形式显示当前网络流量?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve