Cra*_*all 14 ruby ruby-on-rails
我有一个FTP服务器,它只通过运行FTPS(显式FTP over TLS)接受连接.我需要能够使用Ruby on Rails应用程序连接到此.
有人知道这样做的方法吗?我已经尝试过该Net::FTP库,但这似乎不支持FTPS连接.
从 Ruby 2.4 开始,FTP 上的 TLS 已经可用Net::FTP......这导致像 double-bag-ftps 这样的宝石被存档,并且你所有的 google 搜索都会产生过时的答案。
如果您可以通过 TLS 进行显式 FTP(正常连接到 FTP,然后发出命令 AUTH TLS 切换到 TLS 模式),那就太好了...应该能够通过以下方式使用 Ruby 的 Net::FTP 开箱即用{ssl: true}在选项中。
然而,基于 TLS 的隐式 FTP(从一开始就通过 TLS 运行)并不是开箱即用的,您必须重写 的Net::FTP连接方法来建立 SSL 套接字,然后可以选择将命令发送到 FTP 服务器。
Inidka K 发布了一个 Github Gist,但由于这些形式很糟糕(可能会过时),所以我发布了适用于 ShareFile 隐式 FTP 设置的版本(似乎只支持隐式 FTP):
require 'net/ftp'
class ImplicitFtp < 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
Run Code Online (Sandbox Code Playgroud)
然后,在您的代码中:
ftp_options = {
port: 990,
ssl: true,
debug_mode: true, # If you want to see what's going on
username: FTP_USER,
password: FTP_PASS
}
ftp = ImplicitFtp.open(FTP_HOST, ftp_options)
puts ftp.list
ftp.close
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4313 次 |
| 最近记录: |