gpt4 book ai didi

ssh - 使用 ssh 端口转发运行 Erlang Observer

转载 作者:行者123 更新时间:2023-12-01 09:25:09 30 4
gpt4 key购买 nike

我有一个远程 Erlang 节点和本地开发人员的 PC。我要启动本地节点debug@127.0.0.1,启动observer,调用c:nl/1等调试 Action 。我是这样写的:

   #!/bin/sh
export ERL_EPMD_PORT=43690
PORT=`ssh -l user target -p 5022 "/usr/bin/epmd -names" | awk '$2 == "target-node" {print $5}'`
pkill -f ssh.*-fxN.*target
ssh -fxNL 43690:`hostname`:4369 target -p 5022 -l user
ssh -fxNL $PORT:`hostname`:$PORT target -p 5022 -l user
ssh -fxNR 9001:`hostname`:9001 target -p 5022 -l user
erl -name dev@127.0.0.1 -setcookie ABCDEFFJKGSK \
-kernel inet_dist_listen_min 9001 inet_dist_listen_max 9001 \
-eval "net_adm:ping('nodename@target')."
pkill -f ssh.*-fxN.*target

但是当我运行这个脚本时,我会收到如下消息:

bind: Address already in use Bad local forwarding specification ':debian:' Erlang/OTP 17 [erts-6.1] [source] [64-bit] [smp:4:4] [async-threads:10] [kernel-poll:false]

Eshell V6.1 (abort with ^G) (dev@127.0.0.1)1>

如何在本地机器上运行观察者并将它们连接到远程节点?

最佳答案

至少有三件事:

  • 未正确关闭 TCP 连接
  • 节点名称
  • 隧道错误

如果你关闭进程,它使用 kill 保持 TCP 连接,它可以进入 TIME_WAIT 状态几分钟:read more

ssh -L port:host:hostport 中,您有 2 个组件:

  • 第一个是 port 这表示,在我的 local 机器上使用这个端口
  • host:hostport 意思是:“从remote机器连接到这个主机和端口”,你可以想象,你已经在远程机器上并且你想要连接到第三个

您正在使用 hostname 内部,它在您的本地机器上进行评估并返回 debian 这没有意义,因为可能是 debian 在您的远程机器上没有任何意义。尝试使用:

ssh -fxNR 9001:localhost:9001 target -p 5022 -l user

这应该可以按预期工作,没有关于规范的错误。

Erlang 分布式使用节点名称来定位机器。在您正在调用的本地节点上:

net_adm:ping('nodename@target').

它试图直接联系目标上的 4369 端口而不进行端口转发。

Erlang 分布式设计用于本地可信网络。用端口转发来设置它真的很难。您可以在远程机器上启动调试节点并连接到您的系统——这应该很容易。如果远程系统有X服务器,你甚至可以转发观察者窗口(ssh -Y)。

关于ssh - 使用 ssh 端口转发运行 Erlang Observer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26248994/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com