#elixir #phoenix
#elixir #phoenix-framework
Вопрос:
Я собираюсь интегрировать библиотеку SFTPClient в Docker
Elixir/Phoenix
созданный серверный проект для доступа к SFTP-серверу.
Используя FileZilla, он отлично работал с закрытым ключом OpenSSH.
Но при использовании библиотеки она не подключается к серверу и возвращает странные сообщения об ошибках.
options = %{
host: "",
port: ,
user: "",
password: "",
private_key_path: "",
connect_timeout: 60000,
}
SFTPClient.connect(options)
Сообщения об ошибках:
protocol: String.Chars
{:badmatch,
{:error,
{:asn1,
{{:invalid_value, 5},
[
{:asn1rt_nif, :decode_ber_tlv, 1, [file: 'asn1rt_nif.erl', line: 85]},
{:"PKCS-FRAME", :decode, 2, [file: 'PKCS-FRAME.erl', line: 155]},
{:public_key, :der_decode, 2, [file: 'public_key.erl', line: 239]},
{SFTPClient.KeyProvider, :decode_private_key, 2,
[file: 'lib/sftp_client/key_provider.ex', line: 44]},
{:ssh_auth, :get_public_key, 2, [file: 'ssh_auth.erl', line: 145]},
{:ssh_connection_handler, :is_usable_user_pubkey, 2,
[file: 'ssh_connection_handler.erl', line: 1793]},
{:ssh_connection_handler, :"-init_ssh_record/4-lc$^0/1-0-", 2,
[file: 'ssh_connection_handler.erl', line: 477]},
{:ssh_connection_handler, :init_ssh_record, 4,
[file: 'ssh_connection_handler.erl', line: 476]},
{:ssh_connection_handler, :init, 1, [file: 'ssh_connection_handler.erl', line: 412]},
{:ssh_connection_handler, :init_connection_handler, 3,
[file: 'ssh_connection_handler.erl', line: 374]},
{:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 247]}
]}}}},
[
{:public_key, :der_decode, 2, [file: 'public_key.erl', line: 243]},
{SFTPClient.KeyProvider, :decode_private_key, 2,
[file: 'lib/sftp_client/key_provider.ex', line: 44]},
{:ssh_auth, :get_public_key, 2, [file: 'ssh_auth.erl', line: 145]},
{:ssh_connection_handler, :is_usable_user_pubkey, 2,
[file: 'ssh_connection_handler.erl', line: 1793]},
{:ssh_connection_handler, :"-init_ssh_record/4-lc$^0/1-0-", 2,
[file: 'ssh_connection_handler.erl', line: 477]},
{:ssh_connection_handler, :init_ssh_record, 4, [file: 'ssh_connection_handler.erl', line: 476]},
{:ssh_connection_handler, :init, 1, [file: 'ssh_connection_handler.erl', line: 412]},
{:ssh_connection_handler, :init_connection_handler, 3,
[file: 'ssh_connection_handler.erl', line: 374]},
{:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 247]}
]
Ответ:
Ссылаясь на i22-digitalagentur / sftp_client # 11, ключ OpenSSH не будет работать с текущей библиотекой, поэтому я использовал command для преобразования текущего ключа OpenSSH в формат PEM.
ssh-keygen -p -N "" -m pem -f ./key(=keypath)
Комментарии:
1. Библиотека такая: github.com/i22-digitalagentur/sftp_client ?
2. вы пытались развернуть это на localhost без docker? Кажется, вам могут не хватать некоторых зависимостей, таких как openssl
3. Я нашел причину, просматривая исходный код библиотеки. Это произошло потому, что файл ключа был в формате openssh, хотя библиотека использовала формат PEM. После преобразования ключевого файла в формат PEM он работал отлично.
4. @EverestClimber — вы также можете включить фрагмент кода, который вы использовали для преобразования ключа.
5. @AlekseiMatiushkin только что опубликовал ответ, надеясь, что это будет полезно для будущих посетителей.
Ответ №1:
Наконец-то выяснен способ устранения текущей проблемы с библиотекой SFTPClient.
Ссылаясь на https://github.com/i22-digitalagentur/sftp_client/issues/11 , Ключ OpenSSH не будет работать с текущей библиотекой, поэтому я использовал command для преобразования текущего ключа OpenSSH в формат PEM.
ssh-keygen -p -N "" -m pem -f ./key(=keypath)