Pyngrok 持续连接

Pyngrok to getting connecting continuously

我刚开始使用 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?

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

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

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

完全公开,我是 pyngrok 的开发者。这是根据我的更改更新的代码片段。

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()