John Pywtorak
12/14/2007 11:10:00 PM
Hi Fenster,
I suspect it is the sftp.close stanza that is causing the problem. Try
removing that, what happens?
Also, I would recommend using the block form of Net::SSH.start if you
can. That is
Net::SSH.start(...) do |session|
#do all your work here, pass the session to your methods
end
Johnny P
Fenster Blick wrote:
> Hi, I am a beginner to Ruby, having come over from the Java side of
> things. I am writing a simple script to familiarize myself with the
> Net-SSH and Net-SFTP libraries. I want to split my script into several
> different functions to improve readability and organization.
>
> However, I'm having difficulty doing this. When I create an SSH
> connection, the connection automatically dies after I exit the function.
> How can I keep this connection alive? I tried storing the connection as
> a global variable but it did not work - the connection still closed.
>
> Here is a portion of my script. When I run it, I call "testAll". It
> fails on the first line of sftpTest1A:
> ----------------------------------------
>
> $session = nil
>
> def sftpTest1
> puts "Testing sftp..."
> $session= Net::SSH.start( '127.0.0.1', :username=>'user',
> :password=>'password' )
> sftp = $session.sftp.connect
> handle = sftp.opendir( "." )
> items = sftp.readdir(handle)
> puts items
> sftp.close_handle( handle )
> sftp.close
> #At this point, session should still be open, correct?
> end
>
>
> def sftpTest1A
> shell = $session.shell.open #FAILS at this line!
>
> shell.pwd
>
> print shell.stdout while shell.stdout?
> $stderr.puts "-- stderr: --"
> $stderr.print shell.stderr while shell.stderr?
>
> $session.close
>
> end
>
> def testAll
> sftpTest1
> sftpTest1A
> end