【发布时间】:2016-03-03 09:10:31
【问题描述】:
我正在使用:client API 连接到外部节点并在其中远程使用代码,但问题是我正在使用 Dokku 进行部署,如果我可以指定一个 ssh 密钥在运行时。
现在我的代码看起来像这样:
def start(host) do
allow_boot to_char_list(host)
{:ok, slave} = :slave.start(to_char_list(host), :slave, inet_loader_args)
load_paths(slave)
{:ok, slave}
end
inet_loader_args == ' -rsh ssh -loader inet -hosts #{master_node_ip} -setcookie #{:erlang.get_cookie}'
我尝试过将 -rsh 参数设置为 "-rsh ssh -i /path/to/id_rsh" 之类的方法,但它似乎完全忽略了这一点,我不确定它是如何实现的,:client 的 Erlang 文档有点难以理解对我来说(我可以看到它在下面的某个地方使用了:ssh,它可以接受一个可以包含密钥文件的“user_dir”参数,但我不确定如何从:client 设置它)
有什么想法吗?
【问题讨论】:
-
对不起——“inet_loader_args ==" 是文字代码吗?如果是这样,那就错了。但我假设你的意思是这就是它的等价物。
-
你猜对了:)
-
我是否也正确假设您在分配给inet_loader_args 的值周围使用单引号?这是一个重要的细节。
-
是的,我正在用
to_char_list/1转换它 -
查看slave.erl,
-rsh参数被传递给:os.find_executable,在您的示例中它将查找可执行文件ssh -i /path/to/id_rsh,这显然不存在。我认为您最好的选择是做类似-rsh /path/to/my/ssh-wrapper的事情,并让ssh-wrapper成为执行exec ssh -i /path/to/id_rsh $@的shell 脚本。
标签: ssh erlang elixir erlang-otp rsh