Zen*_*Zen 7 ssh erlang rsh elixir erlang-otp
我正在使用:clientAPI连接到外部节点并在远程使用代码,但事实上我正在使用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
Run Code Online (Sandbox Code Playgroud)
inet_loader_args == ' -rsh ssh -loader inet -hosts #{master_node_ip} -setcookie #{:erlang.get_cookie}'
我尝试过设置-rsh参数,"-rsh ssh -i /path/to/id_rsh"但似乎完全忽略了这一点,我不确定它是如何实现的,而且Erlang文档:client对我来说有点难以理解(我可以看到它:ssh在下面使用某处,而可以采取"user_dir的"参数,它可以包含一个密钥文件,但我不知道如何设置,从:client)
有任何想法吗?
该-rsh选项旨在指向不同的可执行文件:
%% Alternative, if the master was started as
%% 'erl -sname xxx -rsh my_rsh...', then 'my_rsh' will be used instead
%% of 'rsh' (this is useful for systems where the rsh program is named
%% 'remsh').
Run Code Online (Sandbox Code Playgroud)
如今人们使用ssh而不是rsh. (大约 10 年前,ssh即使两台计算机位于同一个隔离网络上,安全团队也需要执行先前的工作。)由于命令行界面是兼容的,因此一旦正确设置了密钥,通常只需指向新的可执行文件即可工作。因此使用-rsh指向的选项是有意义的ssh。
正如您所尝试的那样,该参数可用于将其他参数传递给命令,这似乎也是合乎逻辑的ssh。但是,代码假设传递的字符串是PATH. 它用于os:find_executable查找可执行文件,但ssh -i /path/to/id_rsh可能不存在。
但是,您可以利用此功能来指向包括 shell 脚本在内的任何可执行文件。例如,您可以编写ssh-wrapper如下所示的内容:
#!/usr/bin/env ksh
exec ssh -i /path/to/id_rsh $@
Run Code Online (Sandbox Code Playgroud)
然后使用-rsh /path/to/my/ssh-wrapper,以便:slave.start使用您的包装器并指定正确的ssh选项。我发现包装器技术还使未来的维护变得更容易,因为连接逻辑保留在一个地方。
| 归档时间: |
|
| 查看次数: |
297 次 |
| 最近记录: |