Web lists-archives.com

"/usr/bin/expect" -> check if login is required | speed up commands




hi,

i have many Proxmox servers with a lot of VMs. I want to use expect to connect to the VMs via serial console (qm terminal <vm_id>), and check if I need to login (expect "login: "), or if someone forgotten to logout and I have already a  prompt and I need to send an exit before and than try to login again.

My very first expect script looks like:

==============
#!/usr/bin/expect -f
### Setting basics

# Show commands and output
log_user 1

# Set variable
set user root
set password testpass
set name [ exec hostname -f]
set prompt ": "

spawn qm terminal 101

#expect_before ": " {
#   send "exit\r"
#}
   expect "login: "
   send "$user\r"
   expect "password:"
   send "$password\r"
   expect $prompt
   puts "---------- $name START ---------"
   expect $prompt
   send "hostname -f\r"
      expect eof
   puts $expect_out(buffer)
      expect $prompt
      send "cat /etc/debian_version\r"
      expect eof
   puts $expect_out(buffer)
      expect $prompt
      expect eof
      send "sed -i 's/root:\ nobody/root:\ sysops@xxxxxxxxxxx/g' /etc/aliases;newaliases\r"
      expect $prompt
      puts "--------- END -------"
      expect $prompt
      send "exit\r"
      expect "login:"
      send "\x1o\r"
================

it works, if I need to login first, but if I have a shell, I want to send an "exit" before and (re)login again.

The next point is: expect is very slow ... it seems, that there is a default delay .... every command needs 10 seconds :-) Can I remove the delay or make it shorter ?

cu denny