Вы можете сначала отправить свой скрипт на удаленный сервер, затем присоединить оболочку и выполнить его оттуда.Наконец, было бы чище удалить ваш скрипт с удаленного сервера.Следующая процедура предназначена для этой цели.
proc exect_on_shell { script_name user ip pass dir } {
spawn scp $script_name $user@$ip:$dir/$user
expect "password:"
send "$pass\r"
expect eof
puts "running $script_name"
#Attach shell
puts "Connecting to the machine $ip for user $user"
spawn ssh $user@$ip
expect "yes/no" {
send "yes\r"
expect "*?assword" { send "$pass\r"}
} "*?assword" { send "$pass\r"}
#regular expression to match prompt
expect -re {\$ $}
send "su - root\r"
expect {
"Password: " {send "$pass\r"}
}
send "cd $dir/$user\r"
send "chmod +x $script_name\r"
send "$script_name\r"
send "rm -rf $script_name\r"
#logout from root
send "exit\r"
#logout from user
send "exit\r"
expect eof
}
Вы можете назвать это как в следующем фрагменте.
exect_on_shell "your_script.sh" "user_name" "192.168.2.3" "pass" "home/user_name"