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

标签 ssh erlang portforwarding ssh-tunnel

我有一个远程 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/

相关文章:

erlang - Elixir:将列表拆分为奇数和偶数元素,作为元组中的两个项目

ruby-on-rails - Rails Rake和mysql ssh端口转发

linux - 端口转发命令

git - 是否可以使用 ssh key 为外部 Git 设置 TFS 新服务端点

emacs - 如何在 Windows 上将 ssh 与 Emacs 一起使用

linux - 带有 ssh 的 SFTP - 限制仅某些用户访问主目录

erlang - 如何可视化Erlang gen_fsm

linux - 在服务器上设置 SSH 身份验证时需要 Kerberos keytab 文件的原因是什么?

erlang - SD erlang 项目有多成熟?

node.js - 没有端口转发无法通信