# Connecting to Cisco device using Ruby

**URL:** https://rubytalk.org/t/connecting-to-cisco-device-using-ruby/52007
**Category:** ruby-talk
**Created:** [26 February 2009 19:57 UTC](https://rubytalk.org/t/connecting-to-cisco-device-using-ruby/52007 "2009-02-26T19:57:29Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![Peny\_Swain](https://avatars.discourse-cdn.com/v4/letter/p/58956e/32.png) [@Peny\_Swain](https://rubytalk.org/u/Peny_Swain)
#### Post date: [26 February 2009 19:57 UTC](https://rubytalk.org/t/connecting-to-cisco-device-using-ruby/52007/1 "2009-02-26T19:57:29Z")

</div>

Hi,

I'm new to Ruby and want to use Ruby for my automation.I'm trying out a  
small program now.Basically, what I'm trying to do is:

1)Connect to the cisco switch via terminal server which has a public IP  
address and a port number. (I'm using a fake ip here).

2)Login to the switch giving the right username and password.

3)After login, issue a switch command and get the output back.

The below program works if I comment out the "waitfor" but not  
consistent and other times it fails.Can someone please point out whats  
the issue here or if possible can someone share the piece of code that  
does the above task.

Thanks  
s\_k

require 'net/telnet'  
require 'socket'

localhost = Net::Telnet::new(  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Host" =\> "10.10.10.20",  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Port" =\> 2033,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Binmode" =\> true,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Output\_log" =\> 'c:\RubyL\output.txt',  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# "Dump\_log" =\> "dump\_log",  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Prompt" =\> /[$%#\>:] \z/n,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Telnetmode" =\> true,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Timeout" =\> 50,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Waittime" =\> 30  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# "Proxy" =\> proxy  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) { |c| print c }

&nbsp;&nbsp;localhost.cmd("\r") {|c| print c }

&nbsp;&nbsp;if localhost.waitfor({"Match" =\> 'vcctest-30-6k\>' , "Timeout" =\> 50})  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost.cmd("\r enable \r"){|c| print c }  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost.cmd("cisco"){|c| print c }  
&nbsp;&nbsp;else  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Adding username and password  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost.waitfor({"Match" =\> 'Username:' , "Timeout" =\> 50})  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost.cmd("cisco"){|c| print c }  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost.waitfor({"Match" =\> 'Password:' , "Timeout" =\> 50})  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost.cmd("cisco"){|c| print c }  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rescue Exception =\> e  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts e.message  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;retry  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#Adding enable password  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost.waitfor({"Match" =\> 'vcctest-30-6k\>' , "Timeout" =\>  
50})  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost.cmd("\r enable \r"){|c| print c }  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost.cmd("cisco"){|c| print c }  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost.cmd("exit"){|c| print c }

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ensure  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost.close

&nbsp;&nbsp;&nbsp;&nbsp;end  
end

> **···**
>
> --  
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).

---

<div class="post-metadata">

### Author: ![Peter\_Booth1](https://avatars.discourse-cdn.com/v4/letter/p/90db22/32.png) [@Peter\_Booth1](https://rubytalk.org/u/Peter_Booth1)
#### Post date: [26 February 2009 20:26 UTC](https://rubytalk.org/t/connecting-to-cisco-device-using-ruby/52007/2 "2009-02-26T20:26:42Z")

</div>

Did you see [http://groups.google.com/group/ruby-talk-google/browse\_thread/thread/096cabb08c34182c](http://groups.google.com/group/ruby-talk-google/browse_thread/thread/096cabb08c34182c) ?

> **···**
>
> On Feb 26, 2009, at 2:57 PM, Peny Swain wrote:
> 
> > Hi,
> > 
> > I'm new to Ruby and want to use Ruby for my automation.I'm trying out a  
> > small program now.Basically, what I'm trying to do is:
> > 
> > 1)Connect to the cisco switch via terminal server which has a public IP  
> > address and a port number. (I'm using a fake ip here).
> > 
> > 2)Login to the switch giving the right username and password.
> > 
> > 3)After login, issue a switch command and get the output back.
> > 
> > The below program works if I comment out the "waitfor" but not  
> > consistent and other times it fails.Can someone please point out whats  
> > the issue here or if possible can someone share the piece of code that  
> > does the above task.
> > 
> > Thanks  
> > s\_k
> > 
> > require 'net/telnet'  
> > require 'socket'
> > 
> > localhost = Net::Telnet::new(  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Host" =\> "10.10.10.20",  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Port" =\> 2033,  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Binmode" =\> true,  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Output\_log" =\> 'c:\RubyL\output.txt',  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# "Dump\_log" =\> "dump\_log",  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Prompt" =\> /[$%#\>:] \z/n,  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Telnetmode" =\> true,  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Timeout" =\> 50,  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Waittime" =\> 30  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# "Proxy" =\> proxy  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) { |c| print c }
> > 
> > localhost.cmd("\r") {|c| print c }
> > 
> > if localhost.waitfor({"Match" =\> 'vcctest-30-6k\>' , "Timeout" =\> 50})  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost.cmd("\r enable \r"){|c| print c }  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost.cmd("cisco"){|c| print c }  
> > else  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin
> > 
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Adding username and password  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost.waitfor({"Match" =\> 'Username:' , "Timeout" =\> 50})  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost.cmd("cisco"){|c| print c }  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost.waitfor({"Match" =\> 'Password:' , "Timeout" =\> 50})  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost.cmd("cisco"){|c| print c }  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rescue Exception =\> e  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts e.message  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;retry  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#Adding enable password  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost.waitfor({"Match" =\> 'vcctest-30-6k\>' , "Timeout" =\>  
> > 50})  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost.cmd("\r enable \r"){|c| print c }  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost.cmd("cisco"){|c| print c }  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost.cmd("exit"){|c| print c }
> > 
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ensure  
> > &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost.close
> > 
> > &nbsp;&nbsp;&nbsp;end  
> > end  
> > --  
> > Posted via [http://www.ruby-forum.com/\](http://www.ruby-forum.com/%5C).

---

<div class="post-metadata">

### Author: ![Peny\_Swain](https://avatars.discourse-cdn.com/v4/letter/p/58956e/32.png) [@Peny\_Swain](https://rubytalk.org/u/Peny_Swain)
#### Post date: [27 February 2009 01:20 UTC](https://rubytalk.org/t/connecting-to-cisco-device-using-ruby/52007/3 "2009-02-27T01:20:39Z")

</div>

Peter Booth wrote:

> Did you see  
> [http://groups.google.com/group/ruby-talk-google/browse\_thread/thread/096cabb08c34182c](http://groups.google.com/group/ruby-talk-google/browse_thread/thread/096cabb08c34182c)  
> &nbsp;&nbsp;?

Thanks Peter.It worked.Heres's what I did:

t = Net::Telnet::new( "Host" =\> "10.10.10.20","Port" =\> 2044,"Timeout"  
=\> 20, "Output\_log" =\> 'c:\RubyL\output.txt',  
&nbsp;&nbsp;&nbsp;&nbsp;"Telnetmode"=\> true,"Waittime"=\>2) {|c| print c }

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log = lambda{ |c| STDERR.print c }

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#needs initial enter to bring the username promt  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.puts("\r")

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.waitfor(/Username:/, &log)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.puts("cisco")  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.waitfor(/Password:/, &log)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.puts("cisco")

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.waitfor(/vcctest-30-6k\>/, &log)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.puts("enable")  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.waitfor(/Password:/, &log)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.puts("cisco")  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.waitfor(/vcctest-30-6k#/, &log)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.puts("exit")  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.cmd(""){|c| print c}

> **···**
>
> --  
> Posted via [http://www.ruby-forum.com/\](http://www.ruby-forum.com/%5C).
