如何在家庭网络外使用SSH


16

我最近在Raspberry Pi上设置了SSH。它一直在进行中,特别是因为我可以使用应用服务器审核程序通过iPhone控制计算机。可悲的是,这只能通过本地网络工作。

外出时如何使SSH工作?(最好与该应用一起使用。)


您可以从路由器转发端口吗?
SteveIrwin

1
@SteveIrwin我很可能可以,但是由于我不是网络专家,所以我希望使用简单的解决方案,例如Port Map。其实...如果我与Pi共享Mac的互联网,是否可以共享转发的端口?
xxmbabanexx 2013年

1
设置端口转发至少与使用端口映射一样容易。您需要告诉我们更多有关如何设置局域网的信息
John La Rooy

最好的选择是安装Weaved服务(www.weaved.com),然后完成它。您将在互联网上找到的所有其他教程都将带您走上一条令人沮丧的道路。
IgorGanapolsky '16

对于建议使用socketxp的帖子,请使用以下命令在RPI curl -O portal.socketxp.com/download/arm/socketxp && chmod + wx socketxp && sudo mv socketxp / usr / local / bin而不是linux 上下载socketxp 文件。
jeonghoon

Answers:


20

这是我在debian上使用的步骤,这些步骤可能会有用。

1.为Pi设置静态IP。

使用命令打开interfaces文件

sudo nano /etc/network/interfaces

b。将interfaces文件更改为以下内容(这对我有用,我不确定是否可以排除一些行)。

auto lo
iface lo inet loopback
iface eth0 inet static
address 192.168.1.2  #static ip you want for the pi
netmask 255.255.255.0
gateway 192.168.1.1    # the ip address of the router

c。使用ifconfig命令检查Ip是否已更改

2.设置动态DNS

您的ISP分配的IP地址很可能是动态的,因此我们需要一种解决IP地址更改的方法。我使用dnsdynamic和ddclient软件来实现此目的,两者均可免费使用。

a.Sign了用一个帐号dnsdynamic

b。添加一个新域并从列表中选择一个名称和域。您可以选择子域中的任何可用域。单击“ 检查可用性”,然后添加

dnsdynamic屏幕截图

3,在Pi上设置ddclient

使用以下命令安装ddclient

sudo apt-get install ddclient

b。使用以下命令打开ddclient的配置文件,并添加以下行。

sudo nano /etc/ddclient.conf

并将文件更改为以下内容。

# /etc/ddclient.conf
daemon=600
timeout=10
ssl=yes
protocol=dyndns2
use=web, web=myip.dnsdynamic.com
server=www.dnsdynamic.org
login=x@gmail.com  #userid for dnsdynamic.com
password='xxxx'      #password for the same put inside quotes
x.dnsdynamic.com  #the domain name you created

并保存文件。

d。我们希望ddclient服务在重新启动时自动启动。请执行以下操作。

sudo nano /etc/rc.local

出口0之前添加以下命令(这是最后一行)

sudo /usr/sbin/ddclient -daemon 600 -syslog

保存文件,要启动ddclient,请重新启动pi或在提示符下执行上述命令,这将使您的域名保持更新,并在必要时更改当前IP地址。

4.端口转发

找到路由器的型号。

b.Go到portforward.com

c。输入路由器的品牌和型号,以找到有关转发端口的详细指南。

d。选择路由器品牌和型号后,请从重定向页面单击默认指南。

e。在“ 静态IP文本”框中,输入您在步骤1中输入的Pi的静态IP。

f。按照步骤操作并转发端口22,源端口必须为22,目标端口可以是任何端口。在将ssh转换为pi时请记住使用目标端口。为避免混淆,我倾向于使用相同的Source和Destination港口。

如果您正在学习本教程,请通过使用域名替换IP地址从任何地方登录到pi。例如-我使用pi@hometorrent.dnsdynamic.com:22 SSH进入我的pi。


非常感谢!当我从埃克塞特回来时,我会尝试一下!
xxmbabanexx 2013年

+1伟大的答案,但是,你真的需要使用sudo/etc/rc.local,是不是已经以root运行?
HeatfanJohn

这样就完全搞砸了我的Ngrok和Weaveed配置。现在我根本无法连接!
IgorGanapolsky '16

2

首先,您需要设置端口转发。每个路由器略有不同,因此您必须查找路由器的详细信息。
有适用于大多数路由器的通用端口转发方法指南,但我建议您为实际的路由器模型找到一个指南。

设置一个难忘的端口以链接到您的树莓派,例如23456之类。注意不要覆盖通用端口号

最后,使用ssh执行以下操作:

$ ssh -p 23456 user@IP

哪里:


为什么不能使用端口22而不是自定义23456?
IgorGanapolsky

1
@IgorGanapolsky您可以执行此操作,但是1)如果您想在家外通过SSH连接到另一台计算机,则会发生冲突; 2)由于许多“黑客”试图通过端口22登录,因此风险更高,因此通常建议在服务器上关闭它
meneldal

2

从家庭网络外部(意味着从Internet)访问RaspberryPi(甚至笔记本电脑/服务器)不是一件容易的事,因为您的家用笔记本电脑或RaspberryPi只有本地IP地址(在10.xxx范围或192.168.xx范围内)范围)。它没有可从Internet看到的公共IP地址。

您问题的简单答案是使用免费的在线服务,例如SocketXP,它提供了安全的公共隧道端点,可以从家庭网络外部将SSH SSH到您的RaspberryPi。

SocketXP提供了一种从外部网络访问家庭RaspberryPi的简单,安全和简便的方法。SocketXP不需要您破解WiFi路由器中的任何设置。开箱即用。要了解如何从外部将RaspberryPi设置为SSH,请阅读此博客,了解如何使用SocketXP将SSH远程连接到RaspberryPi。

如何设置SocketXP:

步骤1:使用以下命令在RaspberryPi上安装SocketXP客户端。

$ curl -O https://portal.socketxp.com/download/linux/socketxp && chmod +wx socketxp && sudo mv socketxp /usr/local/bin

步骤2: 使用以下命令将SocketXP客户端与SocketXP Cloud Service连接。您需要在https://portal.socketxp.com上注册以获得唯一的身份验证令牌。

$ socketxp -register "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NDk1MTg0MDAsImlkIjoiZ2FuZXNodmVscmFqYW5AZ21ha6K208n0.cB2uYevpH4lWIQGQUJdQ0eiEDqS8OiP_YOiqernnui3rjjadfadsfsfas34"

步骤3:获取一个公共隧道终结点,以从Internet访问您的RaspberryPi。

$ socketxp -connect tcp://localhost:22

Tunnel Access -> tunnel.socketxp.com:35277

步骤4:使用以下命令从Internet SSH到您的RaspberryPi。

$ ssh raspberry-username@tunnel.socketxp.com -p 35277

其中“ raspberry-username”是用于SSH登录到RaspberryPi的用户名/密码。


1

这个问题是古老的,随着时间的流逝,获得公共可访问的IPv4地址的机会越来越少。您很可能在CGNAT后面,这意味着您与ISP的其他客户共享单个公用IPv4。因此,不可能将端口转发到您的PI或其他任何东西。

如果您具有IPv6,则可以为您的PI提供一个静态地址,并允许在路由器上对其进行访问。现在,许多移动提供商将IPv6分配给电话。老式的“陆地” ISP(光纤,DSL,同轴电缆等)经常拖延脚步。

您还可以在云中某处获得带有公共IPv4的廉价VPS(虚拟专用服务器),并建立从PI到VPS的SSH隧道。


0

在phalt的答案之上,您应该签出动态DNS服务之一,例如No IP。它们使您可以使用静态主机名访问家庭网络,尽管由于DSL或电缆提供商断开您的连接,您的IP地址可能每天都会更改。他们也有一个不错的入门页面,该页面还向您介绍如何相应地设置路由器。

inadyn当IP更改时,您可能需要在Raspberry Pi上安装软件包以更新No-IP DNS条目。您可以通过运行以下命令来执行此操作:

sudo apt-get install inadyn

从inadyn自述文件中,我进行了以下示例调用:

inadyn --dyndns_system default@no-ip.com -u USER-p PASS -a HOST

希望这可以帮助。


No-Ip具有DUC(动态更新客户端),这将确保您的IP地址不变。
IgorGanapolsky '16

0

史蒂夫·欧文的答案的补充:

步骤1:

如果通过WLAN连接,请使用:

iface wlan0 inet static
wpa-ssid "xxx" #<=your ssid
wpa-psk "yyy"  #<=your pw
address 192.168.1.xxx #<=preferred static ip (xxx<255)
netmask 255.255.255.0
gateway 192.168.1.1 #<=router's ip

第2步:

更改以上内容后,您需要重新启动networking

sudo /etc/init.d/networking restart

我还在静态块前面添加了2行,即auto wlan0 allow-hotplug wlan0,我在这篇文章中找到了它raspberrypi.stackexchange.com/a/10320/10148我也尝试着在没有它们的情况下进行操作,但是没有任何效果。
XandruCea 2013年

由于Raspbian的网络配置和初始化系统发生了变化,因此该答案应被视为过时的。
goldilocks

0

此外,某些路由器的确对某些动态DNS服务提供了内置支持,您可以在路由器中启用此选项(如果存在),以避免在PI上安装客户端(并节省一些开销)。


0

因此,您在防火墙(路由器)后面有一个ssh服务器(您的Raspberry PI),您想从任何地方连接它。假设您的ssh服务器已正确设置,即在Raspberry上运行“ ssh username @ localhost date”会显示当前日期/时间。

您必须解决两个问题:

  • 您的路由器必须将固定端口转发到树莓ssh端口(通常为22)。
  • 您必须知道路由器的公共IP地址(通常在路由器重新连接时会更改,并且每24小时更改一次)。

端口转发和DynDNS

存在解决方案(正如其他人指出的那样):

如果设置正确,则可以通过以下方式连接您的rasbperry pi:

ssh username@[yourIP] -p [port] 
# or using dyndns 
ssh username@myname.dyndns.org -p [port]

使用sshhub.de

到目前为止尚未提及的另一个非常方便的解决方案是SSHHub(Disclamer,我是作者)。它使用ssh自己的转发从任何地方访问您的Rasperry PI。它可靠,免费且安装简单。注册一次:

ssh info@sshhub.de register

在您的Raspberry PI上运行:

while true; do ssh [username]@sshhub.de -R 22:localhost:22 -N -o ServerAliveInterval=10; sleep 10; done

...就这样!您可以从任何地方连接Raspberry Pi:

ssh -J [username]@sshhub.de localhost

您好,欢迎来到Raspberry Pi!请浏览并访问帮助中心,以了解此处的工作方式。感谢您的贡献,但请注意,我们请您在回答中公开您的隶属关系。(我假设您是推荐软件的作者。)
Ghanima

感谢您指出正确的方向。我是作者。我当然想为寻求解决方案的人们提供有价值的答案。我希望我的表现和sshhub一样好。
奥利弗

0

您可以使用VPN启用对pi的传入访问。OpenVPN是一种解决方案,它要求您有一台可从Internet(传​​入端口)访问的计算机。但是,只要您可以访问一台计算机,其他计算机就不必成为其他计算机,因为它们可以成为OpenVPN服务器的客户端。

另一种选择是使用诸如ZeroTier之类的服务,该服务提供用于创建VPN的集中式服务器,因此您无需运行自己的服务器。这也是免费的。


另一个非常好的选择是使用Wireguard
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.