Forum: Ruby on Rails How to use Net::SSH

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Ab9027f6c7941589420e84ec6488fcd1?d=identicon&s=25 Shripad (Guest)
on 2009-04-08 07:27
(Received via mailing list)
Hi all,

I am having following code in ruby

require 'net/ssh'
 require 'net/sftp'
 begin
    Net::SSH.start
('132.147.161.159',:password=>'k',:port=>1234,:username=>'k') do |ssh|
      ssh.sftp.connect do |sftp|
        Dir.foreach('.') do |file|
            puts file
        end
    end
end
rescue Exception=> Ex
puts Ex.message
end

After executing the above code it is giving me following error

Bad file descriptor - connect(2)

username, password, and ipaddress are fine

What I want is to take data from remote machine to server.

Please Help me out.


Thanks and Regards,
Shri
40db9e75b3f5899258e3bdc0c9210154?d=identicon&s=25 Conrad Taylor (conradwt)
on 2009-04-08 08:25
(Received via mailing list)
On Tue, Apr 7, 2009 at 10:27 PM, Shripad <shripad.joshi.s@gmail.com>
wrote:

>      ssh.sftp.connect do |sftp|
>
> Shri
What are you wanting to do?  SFTP or SSH?  From the code,
it appears that you're trying to move a file from point A to B.
Thus, here's a brief outline of the things that you can do with
SFTP:

require 'net/sftp'

  Net::SFTP.start('host', 'username', :password => 'password') do |sftp|
    # upload a file or directory to the remote host
    sftp.upload!("/path/to/local", "/path/to/remote")

    # download a file or directory from the remote host
    sftp.download!("/path/to/remote", "/path/to/local")

    # grab data off the remote host directly to a buffer
    data = sftp.download!("/path/to/remote")

    # open and write to a pseudo-IO for a remote file
    sftp.file.open("/path/to/remote", "w") do |f|
      f.puts "Hello, world!\n"
    end

    # open and read from a pseudo-IO for a remote file
    sftp.file.open("/path/to/remote", "r") do |f|
      puts f.gets
    end

    # create a directory
    sftp.mkdir! "/path/to/directory"

    # list the entries in a directory
    sftp.dir.foreach("/path/to/directory") do |entry|
      puts entry.longname
    end
  end

Good luck,


-Conrad
Ab9027f6c7941589420e84ec6488fcd1?d=identicon&s=25 Shripad (Guest)
on 2009-04-08 09:09
(Received via mailing list)
Hi,
Thanks Conrad for ur urgent reply

What I want to do is just pickup the images from machine A to machine
B.

I did what you say but I am getting error as follows

E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/net-sftp-2.0.2/lib/net/
sftp.rb:43:in
 `start': undefined method `shutdown!' for nil:NilClass
(NoMethodError)
        from SSHTransfer.rb:8

what I write is this
sftp=Net::SFTP.start('132.147.161.159', 'k',:password => 'k')

Thanks and Regards
40db9e75b3f5899258e3bdc0c9210154?d=identicon&s=25 Conrad Taylor (conradwt)
on 2009-04-08 10:00
(Received via mailing list)
On Wed, Apr 8, 2009 at 12:08 AM, Shripad <shripad.joshi.s@gmail.com>
wrote:

> sftp.rb:43:in
> > On Tue, Apr 7, 2009 at 10:27 PM, Shripad <shripad.josh...@gmail.com>
> > > ('132.147.161.159',:password=>'k',:port=>1234,:username=>'k') do |ssh|
> > > After executing the above code it is giving me following error
> > > Shri
> >     sftp.upload!("/path/to/local", "/path/to/remote")
> >     end
> >     sftp.dir.foreach("/path/to/directory") do |entry|
> >       puts entry.longname
> >     end
> >   end
> >
> > Good luck,
> >
> > -Conrad
> >
> >
>

Can you upgrade the gem and retrying what you
did before?  You can upgrade by doing the following:

sudo gem update

-Conrad
Ab9027f6c7941589420e84ec6488fcd1?d=identicon&s=25 Shripad (Guest)
on 2009-04-08 10:10
(Received via mailing list)
Hi,

I updated the gem.
but still it is showing me the same error.
I am using windows, is that a problem for SFTP?
IS OpenSSH require for SFTP to connect to remote machine?
Is there any other way to do this?

Thanks and Regards,
Shripad
40db9e75b3f5899258e3bdc0c9210154?d=identicon&s=25 Conrad Taylor (conradwt)
on 2009-04-08 12:31
(Received via mailing list)
On Wed, Apr 8, 2009 at 1:09 AM, Shripad <shripad.joshi.s@gmail.com>
wrote:

> Shripad
>

Shripad, I'm not sure of the state of Capistrano on Windows.  I'm sure
that
you'll need the OpenSSH library installed on your system.  Thus, it may
be
easier to install Cygwin and install OpenSSH from there.  Otherwise, you
can
switch to Linux or Mac OS X or other Unix variant.

Good luck,

-Conrad
5f9c010866ed7b4ceff994510de2ef8c?d=identicon&s=25 Jaroslaw Zabiello (jzabiello)
on 2009-05-28 13:08
(Received via mailing list)
No, The same error appears on my Power Mac OSX 10.5.7

$ cat data-sync.rb

require 'rubygems'
require 'net/sftp'
host, user, passwd = '10.50.33.100', 'login', 'pass'
path = '/var/cms/storenew/workspace/live/data'
Net::SFTP.start(host, user, passwd) do |sftp|
  sftp.file.open(path, 'r') do |f|
    puts f.gets()
  end
end

Error for Ruby 1.8.6 EE:

$ ruby -v
ruby 1.8.6 (2008-08-08 patchlevel 286) [i686-darwin9.6.0]

$ ruby data-sync.rb
/opt/ruby-enterprise-1.8.6-20090201/lib/ruby/gems/1.8/gems/net-
sftp-2.0.2/lib/net/sftp.rb:43:in `start': undefined method `shutdown!'
for nil:NilClass (NoMethodError)
  from data-sync.rb:7

And the same for Ruby 1.9:

$ ruby1.9 -v
ruby 1.9.1 (2008-12-30 patchlevel-0 revision 21203) [i386-darwin9]

$ ruby1.9 data-sync.rb
/opt/local/lib/ruby1.9/gems/1.9.1/gems/net-sftp-2.0.2/lib/net/sftp.rb:
43:in `rescue in start': undefined method `shutdown!' for nil:NilClass
(NoMethodError)
  from /opt/local/lib/ruby1.9/gems/1.9.1/gems/net-sftp-2.0.2/lib/net/
sftp.rb:31:in `start'
  from data-sync.rb:7:in `<main>'
5f9c010866ed7b4ceff994510de2ef8c?d=identicon&s=25 Jaroslaw Zabiello (jzabiello)
on 2009-05-28 15:55
(Received via mailing list)
Ech we were fooled by misleading example from
http://net-ssh.rubyforge.org/sftp/v1/faq.html.
The correct API is at
http://net-ssh.rubyforge.org/sftp/v2/api/index.html.
So instead of

sftp = Net::SFTP.start('host', 'username',  'password')

it should be:

sftp = Net::SFTP.start('host', 'username', :password => 'password')
This topic is locked and can not be replied to.