Ant*_*Roe 5 erlang erlang-shell erlang-driver
给定远程Beam.smp服务的已知TCP端口和名称以及已知的cookie,可以短路Erlang分发协议的Erlang Port Mapper Daemon握手阶段,并直接建立到目标Beam的Erlang Shell .smp服务?
该协议记录在这里:
http://erlang.org/doc/apps/erts/erl_dist_protocol.html
和这里:
但是我不清楚是否通过Erlang Port Mapper守护程序或绑定到特定端口的beam.smp服务进行recv_challenge / send_challenge身份验证。
感谢您的时间。
身份验证发生在 Erlang VM(beam 或 beam.smp)之间。epmd 仅处理端口注册。简单地短路 epmd 并不是很容易,其他方法可能更适合您的实际需要。
遗憾的是, epmd 不是默认分发协议( ) 或其SSL 对应协议的选项。有两个未记录的选项,看起来您可以禁用 epmd ( ) 或提供替代实现 ( )。但是,分发协议对 epmd 的依赖性是硬编码的,并且不依赖于这些选项。inet_tcp_dist-no_epmdepmd_module
所以你可以:
erl_epmd在代码服务器级别覆盖模块(可能是最肮脏的方法);inet_tcp_dist除了调用 erl_epmd 的部分之外。主要是,您需要提供您自己的setup/5.如果您不希望 shell 节点连接到 epmd 来注册其名称,您还需要覆盖listen/1. 在这种情况下,您可以传递-no_epmd到命令行。
或者,您可以连接到 epmd 来注册侦听节点,以便使用默认协议创建 shell 连接。
如果 epmd 丢失了节点的跟踪(例如,它被终止,不幸的是 epmd 是单点故障),则此方法特别有用。为此:
erl_epmd:register_node/2然后,您可以关闭 (1) 中建立的连接,并最终通过调用(并在需要时发送精心设计的tcp_closed消息)将丢失的节点重新注册到 epmd 。