如何连接两个Erlang节点?

9

有人能给我多种连接两个Erlang节点的方式吗?我知道一种使用erlang:set_cookie/2的方法,但我想知道是否还有其他方法。


设置 cookie 不会连接节点,它只是用于安全的共享密钥。您是在询问不同的设置 cookie 的方法、导致节点连接到另一个的不同方法,还是 erlang 节点连接彼此的不同机制,或者其他内容? - Ryan Stewart
有不同的方式连接两个Erlang节点。 - erlang
3个回答

8

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到其他远程计算机上,以共享相同的cookie值。


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

getting_started

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


4
根据 NCC Group 的 "Erlang Security 101" (https://www.nccgroup.trust/globalassets/our-research/uk/whitepapers/2014/erlang_security_101_v1-0.pdf) ,不应使用 -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文件方法,并对文件设置限制权限。


2

您应该设置Cookie(与您编写的控制台或在erl执行中)

另外,如果您设置了shortname(sname),第二个节点应该使用shortname运行

如果您设置了nodename,则第二个节点也可以使用-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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接