Erlang remote shell not working

2019-01-26 09:07发布

问题:

I have some strange behaviour on my docker containers (CentOS). When I SSH into it there's a running instance of Erlang VM (api@127.0.0.1) I can't connect to it with -remsh argument, however I can ping it. My Erlang node (api@127.0.0.1) works correctly though.

bash-4.2# ./bin/erl -name 'remote@127.0.0.1' -remsh 'api@127.0.0.1'
Eshell V6.1  (abort with ^G)
(remote@127.0.0.1)1> node().
'remote@127.0.0.1'
(remote@127.0.0.1)2> net_adm:ping('api@127.0.0.1').
pong
(remote@127.0.0.1)3> erlang:system_info(system_version).
"Erlang/OTP 17 [erts-6.1] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]\n"
(remote@127.0.0.1)4> rpc:call('api@127.0.0.1', erlang, node, []).
'api@127.0.0.1'

There're 2 linux processes running - one for the actual VM and another for the process that tries to invoke remote shell

26 ?        Sl    40:46 /home/vcap/app/bin/beam.smp -- -root /home/vcap/app -progname erl -- -home /home/vcap/app/ -- -name api@127.0.0.1 -boot releases/14.2.0299/start -config sys -boot_var PATH lib -noshell
32542 ?     Sl+    0:00 /home/vcap/app/bin/beam.smp -- -root /home/vcap/app -progname erl -- -home /home/vcap/app -- -name remote@127.0.0.1 -remsh api@127.0.0.1

When I copy Erlang binary files to the host (Arch Linux) and run ./bin/erl I have different results:

[jodias@arch tmp]$ ./bin/erl
Erlang/OTP 17 [erts-6.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V6.1  (abort with ^G)
1>

Please note that there's the Erlang system version printed and that's missing on a docker container (however Erlang binaries are exactly the same).

回答1:

What is $TERM in shell you're trying to open remote? There is a problem when TERM is absent or is not known to ncurses which Erlang is built against, making remote shell connection fail silently. Try this one:

TERM=xterm ./bin/erl -name 'remote@127.0.0.1' -remsh 'api@127.0.0.1'

I once reported the problem to Erlang mailing list but no answer came up. Now I see this issue is in Erlang issue tracker. Please vote for it to be picked by OTP team ;)