Python Forum
telnet from ssh tunnel
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
telnet from ssh tunnel
#2
Paramiko could do this.
To understand it, you have to read the documentation.
This is a minimal interactive example.
The source-address is ('127.0.0.1', 0). The port 0 should take any free port for the client.
The desination-address is the second argument of the open_channel method.
This defines where the server should connect. If the switch is on the same host, then 127.0.0.1.
If this is not the case, for example the switch is somewhere in your network with his own ip,
you must change the destination address to the switch-ip.

import telnetlib
import sys
from contextlib import contextmanager
from argparse import ArgumentParser
from getpass import getpass
from paramiko import (
    SSHClient,
    MissingHostKeyPolicy,
)


@contextmanager
def make_tunnel(ssh_user, ssh_password, ssh_host, ssh_port, dst_ip, dst_port):
    client = SSHClient()
    client.set_missing_host_key_policy(MissingHostKeyPolicy())
    client.connect(hostname=ssh_host, username=ssh_user, password=ssh_password, port=ssh_port)
    transport = client.get_transport()
    tunnel = transport.open_channel('direct-tcpip', (dst_ip, dst_port), ('127.0.0.1', 0))
    yield tunnel
    tunnel.close()
    client.close()


if __name__ == '__main__':
    parser = ArgumentParser()
    parser.add_argument('ssh_user', type=str)
    parser.add_argument('ssh_host', type=str)
    parser.add_argument('dst_ip', type=str)
    parser.add_argument('dst_port', type=int)
    parser.add_argument('--ssh_port', type=int, default=22)
    args = parser.parse_args()
    password = getpass('Please enter the password: ')
    try:
        with make_tunnel(ssh_password=password, **vars(args)) as channel:
            tn = telnetlib.Telnet()
            # instead of connecting with telnet
            # reuse the already open socket served
            # by ssh
            tn.sock = channel
            tn.interact()
    except KeyboardInterrupt:
        print('Got KeyboardInterrupt, shutting down graceful')
    except Exception as e:
        print('Error:', e)
        sys.exit(1)
The telnet-client's sock object is assigned to the open channel.
The telnetlib is using the already open connection.
The interact method helps to check if the connections works and
if the device accepts commands.
The argumentparser makes it more flexible.
Almost dead, but too lazy to die: https://sourceserver.info
All humans together. We don't need politicians!
Reply


Messages In This Thread
telnet from ssh tunnel - by oldfart - Aug-10-2019, 09:52 AM
RE: telnet from ssh tunnel - by DeaD_EyE - Aug-10-2019, 06:44 PM
RE: telnet from ssh tunnel - by venquessa - Sep-02-2019, 12:59 PM
RE: telnet from ssh tunnel - by noobami99 - Jul-17-2020, 02:28 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  ssh tunnel connection dropped with Python achille 0 2,140 Jun-27-2021, 06:44 PM
Last Post: achille
  telnet to a device under tacacs management kang18 0 1,562 Jun-05-2020, 06:11 AM
Last Post: kang18
  Building SSH tunnel? searching1 0 1,605 Apr-17-2020, 08:39 PM
Last Post: searching1
  3.6 telnet eyler 3 11,265 Jun-28-2019, 05:22 AM
Last Post: Khanhamid90
  Any suggestion on python library to use for both ssh and telnet? lord_mani 4 3,731 Jun-25-2019, 04:07 PM
Last Post: gb74razor
  telnet question jacklee26 2 2,487 Mar-30-2019, 06:45 AM
Last Post: jacklee26
  Retrieve output from telnet command Networker 1 4,099 Mar-12-2019, 01:36 PM
Last Post: searching1
  Aggregate multiple telnet connections Jibeji 1 4,259 Mar-02-2018, 07:21 PM
Last Post: mpd
  Multithread telnet not working Parallel anna 7 7,447 Feb-05-2018, 01:17 PM
Last Post: anna
  Python telnet script for IP list mangesh 1 59,621 Jun-26-2017, 11:12 PM
Last Post: DeaD_EyE

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020