Search code examples
linuxbashautomationtelnet

Automating telnet session using Bash scripts


I am working on automating some telnet related tasks, using Bash scripts.

Once automated, there will be no interaction of the user with telnet (that is, the script will be totally automated).

The scripts looks something like this:

# execute some commands on the local system
# access a remote system with an IP address: 10.1.1.1 (for example)

telnet 10.1.1.1

# execute some commands on the remote system
# log all the activity (in a file) on the local system
# exit telnet
# continue with executing the rest of the script

There are two problems I am facing here:

  1. How to execute the commands on the remote system from the script (without human interaction)?

    From my experience with some test code, I was able to deduce that when telnet 10.1.1.1 is executed, telnet goes into an interactive session and the subsequent lines of code in the script are executed on the local system. How can I run the lines of code on the remote system rather than on the local one?

  2. I am unable to get a log file for the activity in the telnet session on the local system. The stdout redirect I used makes a copy on the remote system (I do not want to perform a copy operation to copy the log to the local system). How can I achieve this functionality?


Solution

  • Write an expect script.

    Here is an example:

    #!/usr/bin/expect
    
    #If it all goes pear shaped the script will timeout after 20 seconds.
    set timeout 20
    #First argument is assigned to the variable name
    set name [lindex $argv 0]
    #Second argument is assigned to the variable user
    set user [lindex $argv 1]
    #Third argument is assigned to the variable password
    set password [lindex $argv 2]
    #This spawns the telnet program and connects it to the variable name
    spawn telnet $name 
    #The script expects login
    expect "login:" 
    #The script sends the user variable
    send "$user "
    #The script expects Password
    expect "Password:"
    #The script sends the password variable
    send "$password "
    #This hands control of the keyboard over to you (Nice expect feature!)
    interact
    

    To run:

    ./myscript.expect name user password