#!/usr/bin/expect -f # Usage: ./run_as_root.exp "" # Requires the local system to have 'expect' installed (`apt-get install -y expect`). # Automates SSH access via ippadmin, switching to root using `su - root`, and running a command. # This bypasses the issue of `sudo` requiring a password on a non-interactive SSH connection. set ip [lindex $argv 0] set cmd [lindex $argv 1] # Make sure you have the correct key and root password set here or pass as args set key_path "/root/.ssh/itpp-infra" set root_pass "heUa1ucN6Xwta2O" spawn ssh -i $key_path -o StrictHostKeyChecking=no ippadmin@$ip expect { "$ " { send "su - root\r" } timeout { puts "Timeout waiting for prompt"; exit 1 } } expect { "Password: " { send "$root_pass\r" } timeout { puts "Timeout waiting for password prompt"; exit 1 } } expect { "# " { send "$cmd\r" } timeout { puts "Timeout waiting for root prompt"; exit 1 } } expect { "# " { send "exit\r" } timeout { puts "Timeout waiting for command execution completion"; exit 1 } } expect { "$ " { send "exit\r" } timeout { puts "Timeout waiting for ippadmin prompt"; exit 1 } }