How to use Net::SSH

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

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

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

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

Can you upgrade the gem and retrying what you

did before? You can upgrade by doing the following:

sudo gem update

-Conrad

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

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

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

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>'

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