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?