Pyngrok 不断连接

Posted

技术标签:

【中文标题】Pyngrok 不断连接【英文标题】:Pyngrok to getting connecting continuously 【发布时间】:2020-12-16 10:12:00 【问题描述】:

我刚刚开始使用 ngrok,在使用标准程序时,我可以使用 ./ngrok tcp 22 启动隧道,然后在我的仪表板中看到该隧道打开,

但是我想用pyngrok,在这里我用的时候:

from pyngrok.conf import PyngrokConfig 
from pyngrok import ngrok

ngrok.set_auth_token("<NGROK_AUTH_TOKEN>")

pyngrok_config = PyngrokConfig(config_path="/opt/ngrok/ngrok.yml")

ngrok.get_tunnels(pyngrok_config=pyngrok_config) 
ssh_url  = ngrok.connect()

它连接并生成了一个隧道,但我在仪表板中看不到任何打开的东西,为什么?

也许是因为 python 脚本执行并生成 URL,然后停止并从中退出,但是如何使其继续运行,或者如何使用 python 甚至 API 启动隧道?请建议使用 python 或 API 的正确脚本?

【问题讨论】:

我看到这不是真正的身份验证令牌,但有时它会吓坏人们,所以通常建议您将其混淆为明显是假的东西。在下面的示例中,我只是从环境变量中获取令牌。 嗨@alexdlaird,我有来自仪表板的正确身份验证令牌,但由于隐私问题,我没有在此处发布。 【参考方案1】:

具有ngrok 隧道的线程将在 Python 进程终止时立即终止。所以你是对的,发生这种情况的原因是因为你的脚本寿命不长。最简单的方法是by following the example in the documentation。

另一个问题是您如何设置authtoken。由于您没有使用默认的config_path,因此您需要在设置authtoken 之前设置它,以便在正确的文件中更新它(您还需要将它传递给connect())。有几种方法可以做到这一点,但最简单的方法 from the docs 是更新默认配置(因为如果您不将 pyngrok_config 传递给任何未来的方法调用,将使用该配置)。

我还看到你的响应变量是ssh_url,所以你可能想要启动一个 TCP 隧道到 80 以外的端口(默认值)—perhaps you've configured this in your ngrok.yml,但如果不是,我已经更新了对 connect() 的调用,以确保这是为您启动的隧道类型,以防其他人尝试使用相同的代码 sn-p。

完全披露,我是pyngrok 的开发者。这是您的代码 sn-p 更新了我的更改。

import os, time

from pyngrok.conf import PyngrokConfig
from pyngrok import ngrok, conf

conf.get_default().config_path = "/opt/ngrok/ngrok.yml"

ngrok.set_auth_token(os.environ.get("NGROK_AUTH_TOKEN"))

ssh_tunnel = ngrok.connect(22, "tcp")

ngrok_process = ngrok.get_ngrok_process()

try:
    # Block until CTRL-C or some other terminating event
    ngrok_process.proc.wait()
except KeyboardInterrupt:
    print(" Shutting down server.")

    ngrok.kill()

【讨论】:

嗨@alexdlaird,很高兴得到你的回复,我现在测试一下,让你知道。如果您保持联系,我会很高兴,我想知道使用 pyngrok 是更好的方法还是使用他们自己的官方 API 来打开、停止和获取隧道? 我已经在 /opt/ngrok/ngrok.yml 文件中提供了 auth token、tcp 协议、端口 22,所以我需要在 ngrok.set_auth_token 中再次提及 auth token 吗? 你能告诉我如何停止隧道吗? (仅供参考:我打算远程执行 start py 脚本,所以我不能应用键盘中断,所以我需要其他方法来停止隧道。 您只需调用set_auth_token() 一次,因为它会将其存储在您的配置文件中。然后,只要你指定了那个配置文件,以后就可以使用了,不需要重新设置。 这是一个ngrok 问题,但我相信您可以从他们的用户界面重新生成它。

以上是关于Pyngrok 不断连接的主要内容,如果未能解决你的问题,请参考以下文章

隧道未找到错误 Pyngrok streamlit collab

未找到隧道错误 Pyngrok streamlit collab

在 .replace 方法的 Python pyngrok 错误中

每次我运行 pyinstaller 可执行文件时,pyngrok 都会下载 ngrok。我怎样才能让它只下载一次ngrok?

使用 Ngrok 时 Python TCP 套接字返回 getaddrinfo 失败

Grails Quartz MongoDB 连接不断打开