0

我刚刚开始使用 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 建议正确的脚本?

4

1 回答 1

2

ngrok一旦 Python 进程终止,带有隧道的线程就会终止。所以你是对的,发生这种情况的原因是你的脚本寿命不长。完成此操作的最简单方法是按照文档中的示例进行操作。

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

我还看到你的响应变量是ssh_url,所以你可能想要启动一个 TCP 隧道到一个端口以外的端口80(默认)—<a href="https://ngrok.com/docs#tunnel-definitions" rel ="nofollow noreferrer">也许你已经在你的 中配置了这个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()
于 2020-08-27T15:10:14.297 回答