【问题标题】:Remote Tensorboard not working with SSH tunnel远程 Tensorboard 不适用于 SSH 隧道
【发布时间】:2020-07-28 16:48:00
【问题描述】:

在家里,我正在尝试使用在我工作的机器上运行的 Tensorboard 监控 TensorFlow 训练。
我们有一个 ssh 网关可以访问工作中的机器,所以我必须建立一个 ssh 隧道,从我在互联网上看到的情况来看,这是连接 Tensorboard 6006 的默认端口的方法:

ssh -NfL 6006:remote_machine:6006 user@ssh_gateway_machine

然后在远程机器上:

tensorboard --logdir dir/ --port 6006

然后在我家里的机器上:

http://localhost:6006

但是页面是白色的并且永远加载,它无法检索数据。

当我试图监控同一台机器但从另一台机器工作时,使用相同的端口转发方式(没有 ssh 隧道)工作正常,所以我猜问题不是来自 Tensorboard,而是来自 ssh 隧道,但是我不知道为什么。

【问题讨论】:

    标签: tensorflow ssh tensorflow2.0 tensorboard ssh-tunnel


    【解决方案1】:

    在启动张量板时尝试使用bind_all 参数。它允许 tensorboard 的远程连接。所以你的命令应该像

    tensorboard --logdir dir/ --port 6006 --bind_all
    

    参考:https://github.com/tensorflow/tensorboard/blob/master/README.md#i-get-a-network-security-popup-every-time-i-run-tensorboard-on-a-mac

    【讨论】:

    • 感谢您的建议,但仍然无法正常工作...仍在加载,但没有出现任何内容
    • @GabrielC 那我觉得应该和端口安全有关,你应该检查6006端口托管tensorboard的机器上是否允许传入流量。
    【解决方案2】:

    我同意,您必须使用 bind_all 选项执行:

    tensorboard --logdir dir/ --port 6006 --bind_all
    

    但是,也许在您的情况下,您只需要检查ssh_gateway_machine ssh 服务器是否配置为允许端口转发:AllowTcpForwarding yes

    这里的解释:

    例子:

    ssh user@ssh_gateway_machine
    sudo -i
    vi /etc/ssh/sshd_config
    

    如果可能(询问您公司的 IT 安全人员),请编辑行:

    AllowTcpForwarding yes
    

    但在我的情况下,我不得不创建一个 ssh 远程端口转发 -R 选项,而不是在本地执行(在 remote_machine 上),因为我无法从互联网直接访问 @ 的任何端口987654332@网络。

    所以,我认为我的-R 远程端口转发方法更好,如果您的remote_machine 可以访问互联网并且您可以安装/激活 ssh 服务器(在 NAS 上或在您的 local_machine 上)。

    所以,我再说一遍,它是通过在remote_machine 上执行的-R 选项完成的。

    因此,ssh_gateway_machine 变为本地(例如 Synology NAS)。

    如果您没有 NAS,如果您安装/激活 SSH 服务器,它可能是您的local_machine。 (ssh_gateway_machine == local_machine)

    并且您必须修改您的互联网提供商框/网络路由器的端口转发)以将 ssh 传入端口转发到您的内部 ssh_gateway_machine(以便能够通过您的互联网提供商框从互联网传入访问到您的 @987654343 @。

    您必须在ssh_gateway_machine (Synology NAS)、GatewayPortsAllowTcpForwarding 选项中检查和修改服务器 ssh 配置:

    ssh user@ssh_gateway_machine
    sudo -i
    vi /etc/ssh/sshd_config
    

    编辑行:

    GatewayPorts yes
    AllowTcpForwarding yes
    

    另外,不要忘记修改ssh_gateway_machine 的防火墙规则以仅接受来自remote_machine 公共IP 的ssh 传入访问。 也许它也可以在您的互联网路由器上完成。

    之后,你必须从remote_machine执行:

    ssh user@ssh_gateway_machine_public_ip -R 6006:localhost:6006
    

    ssh_gateway_machine_public_ip = local_machine_public_ip = internet_box public_ip

    网络图片: My network map

    【讨论】:

      【解决方案3】:

      在我的例子中,我在 ubuntu 上使用 tensorboard --logdir=runs 运行 tensorboard,我在 http://localhost:6008 获得了永远加载屏幕

      我已经多次运行该命令,并且每次它都旋转一个新端口,因此我试图访问的端口被一个孤儿张量板使用,导致永远加载屏幕。

      最终对我有用的是

      kill -9 <pid_my_old_tensorboards>

      并使用

      运行一个新的张量板

      tensorboard --logdir=runs --port 6008

      【讨论】:

        猜你喜欢
        • 2017-12-18
        • 1970-01-01
        • 2020-11-02
        • 2021-05-11
        • 2015-12-02
        • 2018-10-29
        • 2023-01-25
        • 1970-01-01
        • 2019-08-07
        相关资源
        最近更新 更多