http://qs321.pair.com?node_id=1080844


in reply to Passing telnet commands through SSH

Hi There,

One approach that might come in handy here is SSH tunneling. This is a technique for directing a remote SSH connection back to your local server.

To recap, you have ssh access to an intermediate host that has telnet access to the destination machine. Telnet normally runs on port 23.

Hopefully your local host is a 'Nix machine, which means that you can use a recipe such as this to set up port forwarding: Setting up an SSH tunnel

E.g. in another window: % ssh -g -L 10023:telnet-host:23 ssh-host

Telnet will then appear to be running locally on port 10023:

% telnet localhost 10023 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. .... login:
You can then adapt you script to connect to telnet on your localhost on port 10023.
#!/usr/bin/perl use warnings; use strict; use Net::Telnet; my ($username, $password) = @ARGV; die "usage $0 username password" unless $username && $password; my $telnet = new Net::Telnet ( Timeout=>10, Errmode=>'die', Port => 10 +023); $telnet->open('localhost'); $telnet->waitfor('/[\$#%:><][\s\b]+$/'); print "found login prompt..."; $telnet->print($username); $telnet->waitfor('/[\$#%:><][\s\b]+$/'); print "found password prompt..."; $telnet->print($password); print "logged in yay!\n";
Hope this helps.

Replies are listed 'Best First'.
Re^2: Passing telnet commands through SSH
by SiliconeClone (Initiate) on Apr 03, 2014 at 00:50 UTC

    Ok this worked! However, I need it to work programatically. So i attempted to integrate the tunnel into the program.

    It opens fine, I can be on the sshHost machine and see the tunnel up and running. However the program itself locks at that point. Sadness, right?

    I can not figure out why it is locking. I have a sub that opens the tunnel, and then after that it should run the telnet sub (which works if I open the tunnel manually). At that point it just hangs. Any more suggestions?

    It is hanging at the following

    channel 1: open confirm rwindow 0 rmax 32768

    This only happens when I open the tunnel. If I send other commands like "who", etc.. it does not hang at all.

      I'm totally just guessing here - no real experience in this arena - but you might try running tunnel connection as a child process (or maybe the parent spawns a child to run telnet, and then the parent opens the tunnel? I'm clueless on that).

      Anyway it sounds like the program hangs because it's waiting for i/o on one connection, and so cannot do anything on the other. In my limited experience using SSH tunnels (interactively only, never via scripts), the tunnel ssh connection is always running separately (e.g. in another shell) from whatever process is supposed to actually do stuff using the tunnel.

Re^2: Passing telnet commands through SSH
by SiliconeClone (Initiate) on Apr 02, 2014 at 22:10 UTC

    Going to try this now. Thanks

    And yes your recap is dead on

Re^2: Passing telnet commands through SSH
by SiliconeClone (Initiate) on Apr 03, 2014 at 01:55 UTC

    I finally got it working; for the most part lol

    It is still hanging after creating the tunnel. I think this is because the SSH after the tunnel is open flips to the host machine.

    ie I am in "Dev" environment, so I log into that via ssh. Send my tunnel command to "login" environment, at this point it hangs, but it did open the pid. I think it has something to do with the flipping, same reason I couldn't directly send the telnet through the SSH connection originally

    To get around this I have forked the SSH sub, so that my telnet stuff will run regardless. Since it wouldn't wait for the sub routine what I ended up doing was adding a small sleep timer to give the tunnel time to establish

    Thanks for your help!