Ошибка подключения Elixir / Phoneix — SFTPClient

#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)