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

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

评论

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

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

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

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

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

#1 楼

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

1.为Pi设置静态IP。

a。使用以下命令打开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


2.设置动态DNS

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

a.Sign注册一个具有dnsdynamic

的帐户b。添加一个新域,然后从列表中选择一个名称和域。您可以选择子域中的任何可用域。然后添加



3.在Pi上设置ddclient

a。使用com安装ddclient mand

sudo apt-get install ddclient


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

sudo nano /etc/ddclient.conf

< br并将文件更改为以下文件。

# /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


并保存文件。


sudo nano /etc/rc.local


在退出0(最后一行)之前添加以下命令br />
保存文件。要启动ddclient,请重新启动pi或在提示符下执行上述命令。它将使您的域名更新,并在必要时更改当前IP地址。

4.Port Forwarding

a。查找路由器的型号。

b。转到portforward.com

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

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

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

f。按照步骤操作并转发端口22。 22和目标端口可以是任何端口。请切入pi时使用目标端口。为避免混淆,我倾向于使用相同的源端口和目标端口。

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

评论


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

– xxmbabanexx
13年4月3日在21:18

+1很好的答案,但是,您真的需要在/etc/rc.local中使用sudo,不是已经以root身份运行吗?

–热火约翰
2013年9月25日20:49在

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

– IgorGanapolsky
16年8月7日在23:48

#2 楼

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

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

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

$ ssh -p 23456 user@IP


其中:


IP是家庭路由器的IP地址

-p命令告诉ssh尝试隧道连接到哪个端口


评论


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

– IgorGanapolsky
16年8月12日在15:55

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

– Meneldal
19年2月24日在10:59

#3 楼

从家庭网络外部(意味着从Internet)访问RaspberryPi(甚至笔记本电脑/服务器)不是一件容易的事,因为您的家用笔记本电脑或RaspberryPi只有本地IP地址(在10.xxx范围内或192.168.xx范围内)范围)。它没有可从Internet看到的公共IP地址。
您的问题的简单答案是使用免费的在线服务,例如SocketXP,它提供安全的公共隧道终结点,以从本地网络外的SSH进入RaspberryPi 。
SocketXP提供了一种从外部网络访问家庭RaspberryPi的简单,安全和简便的方法。 SocketXP不需要您破解WiFi路由器中的任何设置。开箱即用。要了解如何从外部将RaspberryPi设置为SSH,请阅读此博客,了解如何使用SocketXP将SSH远程连接到RaspberryPi。
如何设置SocketXP:
步骤1:
在您的计算机上安装SocketXP客户端使用以下命令运行RaspberryPi。
$ 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登录到您的RaspberryPi。

#4 楼

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

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

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

#5 楼

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

您可能希望在Raspberry Pi上安装inadyn软件包以在以下情况下更新No-IP DNS条目: IP发生变化。您可以通过运行以下命令来执行此操作:

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年8月12日在15:57

#6 楼

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

步骤1:

如果通过无线局域网连接,请使用:

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年12月31日19:23在

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

– goldilocks♦
16-4-22在13:42

#7 楼

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

#8 楼

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

您必须解决两个问题:


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

端口转发和DynDNS

解决方案存在(如前所述)其他人):


在路由器上打开端口转发是特定于每个路由器的,通常是在路由器设置网站上完成的。
通过外部网站(https://www.google.com/search?q=whats+my+ip)最容易确定当前ip。如果您的IP定期更改,则可以获取动态dns条目(https://www.noip.com/、https://dyn.com/dns/等)。

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

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

SSHHub(揭秘者,我是作者)。它使用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!请参观并访问帮助中心,以了解此处的工作方式。感谢您的贡献,但请注意,我们请您在回答中公开您的隶属关系。 (我假设您是推荐软件的作者。)

–加纳马♦
20 Jan 14 '21:46



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

–奥利弗
20年1月14日在22:58

#9 楼

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

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

评论


另一个非常好的选择是使用线护。

– Ingo
20 Jan 20 '20 at 12:32