Passwörter mit expect einfüttern

From Bitbull Wiki
Jump to navigation Jump to search

es ist eine böse sache, aber manchmal kommt man nicht drum rum passwörter mit einem script zu übergeben.

ich habe hier zwei scripts um mit expect einen befehl eines anderen users zu starten: das passwort wird hier hard codiert (das ist ganz ganz böse :)

#!/usr/bin/expect
set password "geheimgeheim"
spawn /bin/su - test-user -c "cat testfile"
expect "Password:"
send "$password\r"
expect eof

das passwort wird als parameter ($1) an das script übergeben (das ist auch böse :)

#!/usr/bin/expect
set password [lindex $argv 1]
spawn /bin/su - test-user -c "cat testfile"
expect "Password:"
send "$password\r"
expect eof

falls das expect script bestandteil eines bash scripts ist, kann man das ganze wie folgt ein ein bash script einpacken:

#!/bin/bash
date
echo ' #!/usr/bin/expect
set password [lindex $argv 1]
spawn /bin/su - test-user -c "cat testfile"
expect "Password:"
send "$password\r"
expect eof ' | /usr/bin/expect
date

hier noch ein kleines script fuer telnet

#!/usr/bin/expect
set user "admin"
set password "geheim"
spawn telnet router-ip
expect "login:"
send "$user\r"
expect "Password:"
send "$password\r"
expect "Last"
spawn reboot
expect eof

mit sudo, passwort abfrage und das ganze in schön ... so gehts

#!/usr/bin/expect -f

set timeout 30
set env(TERM)
set server [lindex $argv 0]
set user [lindex $argv 1]
set cmd [lindex $argv 2]
set sudo [lindex $argv 3]
set prompt "\[.*\@.* .*\]\$"

spawn ssh $user@$server
expect {
   "(yes/no)? " {
      send "yes\r"
      expect {
         "assword: " {
            interact -nobuffer -re "(.*)\r" return
            }
         "$prompt" {}
         }
      }
   "assword: " {
      interact -nobuffer -re "(.*)\r" return
      }
   "$prompt" { }
   }

if { $sudo == "1" } {
   send "sudo su -\r"
   expect "$prompt"
   send "$cmd\r"
   }
if { $sudo == "" || $sudo == "0" } {
   send "$cmd\r"
   }
sleep 0.2
expect "$prompt" { send "exit\r" }

configuration von cisco router auslesen, zB für backup

#!/usr/bin/expect
set user "admin"
set password "secret!"
spawn telnet 10.0.0.20
expect "name:"
send "$user\r"
expect "word:"
send "$password\r"
expect "*#"
send "ter len 0\r"
expect "*#"
send "show run\r"
expect "*#"
send "exit\r"