2

我有一个小的 escript 文件,它连接到一个节点并执行一些 rpc 调用和一些东西......

它适用于短名称或长名称,但依赖于分布式 Erlang 的标准 http 通信。

我想使用它,但使用 https/SSL 进行分发。

要使用 SSL 启动“普通”Erlang 系统,您必须传入各种标志来告诉 Erlang 以这种方式运行,如文档所示:

$ ERL_FLAGS="-boot \"/home/me/ssl/start_ssl\" -proto_dist inet_ssl 
  -ssl_dist_opt client_certfile \"/home/me/ssl/erlclient.pem\" 
  -ssl_dist_opt server_certfile \"/home/me/ssl/erlserver.pem\" 
  -ssl_dist_opt verify 1 -ssl_dist_opt depth 1"
$ export ERL_FLAGS
$ erl -sname ssl_test

这将默认分发机制 ( inet_tcp_dist) 替换为 ssl机制 ( inet_ssl_dist)。

escript将 erlang 文件作为 shell 脚本文件运行。

我的问题是:

  • 是否有可能获得运行 escript 以使用安全分发机制而不是默认机制的 Erlang“环境”?
  • 如果是这样,我该怎么做?
4

1 回答 1

3

您不必通过环境设置这些标志,您也可以直接将它们传递给erl,请参见ch. 1.4 这里erl标志可以通过参数行传递给escript %%!


脚本

#!/usr/bin/env escript
%%! -boot start_ssl -proto_dist inet_ssl -ssl_dist_opt client_certfile /home/me/ssl/erlclient.pem -ssl_dist_opt server_certfile /home/me/ssl/erlserver.pem -ssl_dist_opt verify 1 -ssl_dist_opt depth 1
main(_) ->
    io:format("~p~n", [init:get_arguments()]).

zed@zed:~$ ./z.escript 
[{root,["/opt/erlang-R13B03/lib/erlang"]},
 {progname,["erl"]},
 {home,["/home/zed"]},
 {boot,["start_clean"]},
 {noshell,[]},
 {boot,["start_ssl"]},
 {proto_dist,["inet_ssl"]},
 {ssl_dist_opt,["client_certfile","/home/me/ssl/erlclient.pem"]},
 {ssl_dist_opt,["server_certfile","/home/me/ssl/erlserver.pem"]},
 {ssl_dist_opt,["verify","1"]},
 {ssl_dist_opt,["depth","1"]}]
于 2010-01-08T22:17:48.197 回答