微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有相同区域的多个 SSH TCP 端口 22 隧道

如何解决具有相同区域的多个 SSH TCP 端口 22 隧道

我目前正在使用多个 RaspBerry Pi 启动一个项目。我已经有一个系统,如果代码失败,请在端口 22 上打开 ssh 隧道。但是,如果两个或多个 RaspBerry Pi 出现故障,则只有一个可以在区域 'au' 的端口 22 (tcp) 上打开隧道。通过 ssh 访问它

def ssh():
    ngrok.set_auth_token("MY_SECRET_TOKEN")
    conf.get_default().region = 'au'
    ssh = ngrok.connect(22,"tcp")
    ngrok_process = ngrok.get_ngrok_process()
    try:
        ngrok_process.proc.wait()
    except KeyboardInterrupt:
        ngrok.kill

我已经与 Ngrok 的支持人员取得联系,他们提到在端口 22 (tcp) 上可能有多个隧道。

在免费计划中,您只能有一个打开的 ngrok“会话”,但您最多可以通过该会话运行 4 条隧道。您所有的隧道都可以通向端口 22,这样可以正常工作。 - Ngrok 支持

可能是指具有不同的端口隧道(22、80)

是的,您可以在一个会话中在“au”区域中打开多个隧道

当前收到此错误

Traceback (most recent call last):
  File "/home/pi/main.py",line 210,in <module>
    ssh()
  File "/home/pi/main.py",line 30,in ssh
    ssh = ngrok.connect(22,"tcp")
  File "/usr/local/lib/python3.7/dist-packages/pyngrok/ngrok.py",line 245,in connect
    api_url = get_ngrok_process(pyngrok_config).api_url
  File "/usr/local/lib/python3.7/dist-packages/pyngrok/ngrok.py",line 162,in get_ngrok_process
    return process.get_process(pyngrok_config)
  File "/usr/local/lib/python3.7/dist-packages/pyngrok/process.py",line 295,in get_process
    return _start_process(pyngrok_config)
  File "/usr/local/lib/python3.7/dist-packages/pyngrok/process.py",line 465,in _start_process
    ngrok_process.startup_error)
pyngrok.exception.PyngrokNgrokError: The ngrok process errored on start: Your account is limited to 1 simultaneous ngrok client session.\nActive ngrok client sessions in region 'au':\n  - ts_1opHl3G90CmgGPiP6JM0IUpcXZM (IP)\r\n\r\nERR_NGROK_108\r\n.

是否可以在一个会话中打开多个 ngrok.connect(22,"tcp") 隧道并打开区域“AU”?

解决方法

是的,付费 ngrok 帐户可以做到这一点。您可以简单地多次调用 connect()

from pyngrok import ngrok,conf

ngrok.set_auth_token("MY_AUTH_TOKEN")
conf.get_default().region = "au"

ssh1 = ngrok.connect(22,"tcp")
print(ssh1.public_url)
ssh2 = ngrok.connect(22,"tcp")
print(ssh2.public_url)
ssh3 = ngrok.connect(22,"tcp")
print(ssh3.public_url)
ssh4 = ngrok.connect(3306,"tcp")
print(ssh4.public_url)
http1 = ngrok.connect(8080,bind_tls=True)
print(http1.public_url)
http2 = ngrok.connect(8080,bind_tls=True)
print(http2.public_url)

print(len(ngrok.get_tunnels()))

ngrok_process = ngrok.get_ngrok_process()
try:
    ngrok_process.proc.wait()
except KeyboardInterrupt:
    ngrok.kill()

上面的例子将导致总共 6 个隧道,混合多个 TCP 隧道(到相同和不同的端口)和多个 HTTP 隧道。

这将适用于免费帐户。假设您的有效身份验证令牌已成功注册到 pyngrok(可能是这里的问题?),我会向他们发送代码段 ts_1opHl3G90CmgGPiP6JM0IUpcXZM (IP)\r\n\r\nERR_NGROK_108\r\n,因为这看起来像是他们为您的请求生成的调试代码.或许将这些提供给 ngrok 支持人员可以帮助他们缩小问题所在。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?