/usr/lib/ruby/vendor_ruby/net/sftp.rb is in ruby-net-sftp 1:2.1.2-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | require 'net/ssh'
require 'net/sftp/session'
module Net
# Net::SFTP is a pure-Ruby module for programmatically interacting with a
# remote host via the SFTP protocol (that's SFTP as in "Secure File Transfer
# Protocol" produced by the Secure Shell Working Group, not "Secure FTP"
# and certainly not "Simple FTP").
#
# See Net::SFTP#start for an introduction to the library. Also, see
# Net::SFTP::Session for further documentation.
module SFTP
# A convenience method for starting a standalone SFTP session. It will
# start up an SSH session using the given arguments (see the documentation
# for Net::SSH::Session for details), and will then start a new SFTP session
# with the SSH session. This will block until the new SFTP is fully open
# and initialized before returning it.
#
# sftp = Net::SFTP.start("localhost", "user")
# sftp.upload! "/local/file.tgz", "/remote/file.tgz"
#
# If a block is given, it will be passed to the SFTP session and will be
# called once the SFTP session is fully open and initialized. When the
# block terminates, the new SSH session will automatically be closed.
#
# Net::SFTP.start("localhost", "user") do |sftp|
# sftp.upload! "/local/file.tgz", "/remote/file.tgz"
# end
def self.start(host, user, options={}, &block)
session = Net::SSH.start(host, user, options)
sftp = Net::SFTP::Session.new(session, &block).connect!
if block_given?
sftp.loop
session.close
return nil
end
sftp
rescue Object => anything
begin
session.shutdown!
rescue ::Exception
# swallow exceptions that occur while trying to shutdown
end
raise anything
end
end
end
class Net::SSH::Connection::Session
# A convenience method for starting up a new SFTP connection on the current
# SSH session. Blocks until the SFTP session is fully open, and then
# returns the SFTP session.
#
# Net::SSH.start("localhost", "user", "password") do |ssh|
# ssh.sftp.upload!("/local/file.tgz", "/remote/file.tgz")
# ssh.exec! "cd /some/path && tar xf /remote/file.tgz && rm /remote/file.tgz"
# end
def sftp(wait=true)
@sftp ||= begin
sftp = Net::SFTP::Session.new(self)
sftp.connect! if wait
sftp
end
end
end
|