【问题标题】:How to connect two erlang nodes?如何连接两个erlang节点?
【发布时间】:2017-04-29 03:24:05
【问题描述】:

谁能给我更多的一种可能性来连接两个 Erlang 节点。 我知道使用 erlang:set_cookie/2 的一种方法,并且好奇是否还有另一种方法。

【问题讨论】:

  • 设置 cookie 不会连接节点。它只是用于安全的共享秘密。您是否要求设置 cookie 的不同方法、使节点连接到另一个节点的不同方法、erlang 节点可以通过哪些不同机制相互连接,或者其他什么?
  • 是连接两个erlang节点的不同方式

标签: erlang


【解决方案1】:

1.使用-setcookie

erlang执行时也可以使用-setcookie

在我本地机器的第一个终端中,

hyun@hyun-VirtualBox:~$ erl -sname a -setcookie guitar
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]

还有我本地机器的第二个终端,

hyun@hyun-VirtualBox:~$ erl -sname b -setcookie guitar
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]

最后,在第一个终端,

Eshell V7.0  (abort with ^G)
(a@hyun-VirtualBox)1> net_adm:ping('b@hyun-VirtualBox').
pong

2。复制$HOME/.erlang.cookie

您可以将$HOME/.erlang.cookie 复制到其他远程PC 以共享相同的cookie 值。


此外,您还必须考虑安全性。

getting_started

运行 erlang:set_cookie(node(), nocookie) 时,Erlang 节点完全不受保护。这有时适用于通常不联网的系统,或仅用于维护目的的系统。有关安全系统的详细信息,请参阅 auth(3)。

【讨论】:

    【解决方案2】:

    根据 NCC Group (https://www.nccgroup.trust/globalassets/our-research/uk/whitepapers/2014/erlang_security_101_v1-0.pdf) 的“Erlang Security 101”,您不应使用 -setcookie,因为服务器的其他用户将能够使用 ps ax | grep erl 看到 cookie。例如,从我本地计算机上的终端:

    zed@blargh:~$ erl -setcookie abc -sname e1
    Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]
    
    Eshell V5.10.4  (abort with ^G)
    (e1@blargh)1> 
    

    然后从第二个终端,作为不同的用户:

    eks@blargh:~$ ps ax | grep erl
     2035 pts/7    Sl+    0:00 /usr/lib/erlang/erts-5.10.4/bin/beam.smp -- -root /usr/lib/erlang -progname erl -- -home /home/zed -- -setcookie abc -sname e1
     2065 pts/8    S+     0:00 grep --color=auto erl
     9841 ?        S      0:00 /usr/lib/erlang/erts-5.10.4/bin/epmd -daemon
    

    你可以清楚地看到ps的输出中的cookie。拥有 cookie 允许第三方加入 erlang 集群。您应该改用 cookie 文件方法,对文件具有限制性权限。

    【讨论】:

      【解决方案3】:

      您应该设置 cookie(在您编写的控制台中或在 erl 上执行) 此外,如果您设置短名称(sname)第二个节点应该使用短名称运行 如果设置节点名,第二个节点也可以使用 -name 运行

      作品:

       erl -name obsrv@127.0.0.1 -setcookie democookie
       erl -name n2@127.0.0.1 -setcookie democookie
      

      不工作:

      erl -name obsrv@127.0.0.1 -setcookie democookie
      erl -name n2 -setcookie democookie
      

      如果节点在不同的机器上运行,请检查它打开的端口 40293 或者在erl执行时设置端口(并设置最小值,最大值)

      erl \
      -kernel inet_dist_listen_min 40293\
      -setcookie democookie\
      -name erl_node_1
      

      【讨论】:

        猜你喜欢
        • 2019-07-19
        • 2011-04-11
        • 2014-06-28
        • 2017-12-16
        • 2013-04-16
        • 1970-01-01
        • 2019-06-09
        • 2022-01-25
        • 2018-09-24
        相关资源
        最近更新 更多