# Connecting to Cisco device using Ruby

**URL:** <https://www.ruby-forum.com/t/connecting-to-cisco-device-using-ruby/161478>\
**Category:** Ruby\
**Created:** [February 26, 2009, 8:58pm UTC](https://www.ruby-forum.com/t/connecting-to-cisco-device-using-ruby/161478 "2009-02-26T20:58:19Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![s\_k](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/a587f6/32.png) [@s\_k](https://www.ruby-forum.com/u/s_k)\
**Post date:** [February 26, 2009, 8:58pm UTC](https://www.ruby-forum.com/t/connecting-to-cisco-device-using-ruby/161478/1 "2009-02-26T20:58:19Z")

</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(  
“Host” =\> “10.10.10.20”,  
“Port” =\> 2033,  
“Binmode” =\> true,  
“Output\_log” =\> ‘c:\RubyL\output.txt’,  
# “Dump\_log” =\> “dump\_log”,  
“Prompt” =\> /[$%#\>:] \z/n,  
“Telnetmode” =\> true,  
“Timeout” =\> 50,  
“Waittime” =\> 30  
# “Proxy” =\> proxy  
) { |c| print c }

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

if localhost.waitfor({“Match” =\> ‘vcctest-30-6k\>’ , “Timeout” =\> 50})  
localhost.cmd("\r enable \r"){|c| print c }  
localhost.cmd(“cisco”){|c| print c }  
else  
begin

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

```

50})  
localhost.cmd("\r enable \r"){|c| print c }  
localhost.cmd(“cisco”){|c| print c }  
localhost.cmd(“exit”){|c| print c }

```
  ensure
    localhost.close

end

```

end

---

<div class="post-metadata">

**Author:** ![s\_k](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/a587f6/32.png) [@s\_k](https://www.ruby-forum.com/u/s_k)\
**Post date:** [February 26, 2009, 9:28pm UTC](https://www.ruby-forum.com/t/connecting-to-cisco-device-using-ruby/161478/2 "2009-02-26T21:28:07Z")

</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)  
?

---

<div class="post-metadata">

**Author:** ![s\_k](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/a587f6/32.png) [@s\_k](https://www.ruby-forum.com/u/s_k)\
**Post date:** [February 27, 2009, 2:21am UTC](https://www.ruby-forum.com/t/connecting-to-cisco-device-using-ruby/161478/3 "2009-02-27T02:21:29Z")

</div>

Peter B. 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)  
> ?

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’,  
“Telnetmode”=\> true,“Waittime”=\>2) {|c| print c }

```
  log = lambda{ |c| STDERR.print c }

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

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

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

```
