Я пытаюсь заставить работать собственное FTP-соединение с нечетным FTP-сервером в ruby.Требуется TLS и неявный SSL.У меня настроен и работает клиент FileZilla.Вот мой код:
require 'double_bag_ftps'
DoubleBagFTPS.open(ftp_host, ftp_user, passwd, nil, DoubleBagFTPS::IMPLICIT, :verify_mode => OpenSSL::SSL::VERIFY_NONE) do |ftp|
...
files = ftp.list(file_path)
STDOUT.write files
end
Я получаю следующую ошибку во время выполнения при запуске выше:
bunches of traceback lines
<path_to_gems>/double-bag-ftps-0.1.4/lib/double_bag_ftps.rb:160:in `initialize': wrong argument type nil (expected OpenSSL/SSL/CTX) (TypeError)
Я не могу вывести что-либо из сервера с Ruby итрадиционный камень net / ftp (различные ошибки, связанные с проблемами TLS / SSL). DoubleBagFTPS , кажется, самый многообещающий драгоценный камень, но я все еще получаю ошибку.Возможно, я неправильно вызываю функцию open.Единственный nil
является четвертым параметром, но он четко прописан в примере DooubleBagFTPS.
Может кто-нибудь помочь?
Обновление
Perпредложение, вот мой новый код
class MyFTP < Net::FTP
FTP_PORT = 990
def connect(host, port = FTP_PORT)
synchronize do
@host = host
@bare_sock = open_socket(host, port)
begin
ssl_sock = start_tls_session(Socket.tcp(host, port))
@sock = BufferedSSLSocket.new(ssl_sock, read_timeout: @read_timeout)
voidresp
if @private_data_connection
voidcmd("PBSZ 0")
voidcmd("PROT P")
end
rescue OpenSSL::SSL::SSLError, Net::OpenTimeout
@sock.close
raise
end
end
end
end
def ftp_options
{
username: 'user',
password: 'password',
ssl: true,
passive: true
}
end
MyFTP.open(ftp_host, ftp_options) do |ftp|
ftp.login
files = ftp.chdir(file_path)
files = ftp.list
STDOUT.write files
end
Я все еще получаю сообщение об ошибке следующим образом:
---stack-trace---
<path_to_gem>/ruby/2.5.0/net/protocol.rb:52:in `connect': SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: unknown protocol (OpenSSL::SSL::SSLError)