Я использую :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"
, но, похоже, он полностью игнорирует это, я не совсем уверен, как это реализовано, и документы Erlang для :client
мне немного сложно понять (я вижу это использует :ssh
где-то внизу, и это может принимать аргумент «user_dir», который может содержать файл ключа, но я не уверен, как установить это из :client
)
Есть идеи?
to_char_list/1
- person Zen   schedule 30.11.2015~/.ssh/id_rsa
- person Zen   schedule 30.11.2015-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 $@
. - person Martin S.   schedule 24.12.2015