如何使用 expect 工具自动化流程?

How to automate the process with expect tool?

我想用 expect 自动化一个过程:
1.login 与 ssh 中的普通用户
2.su 到 root
3.make 目录 /home/test

set user xxxx
set host yyyy
set password1 pass1
set password2 pass2
set timeout 60   
spawn ssh  $user@$host
expect "*assword:*"
send "$password1\r"
spawn  su
expect "*assword:*"
send "$password2\r"
send "mkdir /home/test"
close

如何修复代码以自动化我的流程?

基本上,expect 将使用两个可行的命令,例如 sendexpect。在这种情况下,如果使用 send,则之后必须有 expect(在大多数情况下)。 (反之亦然不是强制性的)

这是因为如果没有它,我们将错过生成进程中发生的事情,因为 expect 将假设您只需要发送一个字符串值而不期望会话中的任何其他内容,从而使脚本退出并导致失败。

除了遗漏的命令外,我发现 su 命令有一个问题。我希望您的意图是在远程主机而不是本地创建目录,并执行 su 命令。因此,假设您只需要将命令作为 su 发送到服务器。您当前的代码将在本地计算机中生成 su

#!/usr/bin/expect
set host xxx.xxx.xxx.xxx
set user dinesh
set loginpwd welcome
set adminpwd root
set timeout 60
set prompt "#|>|\$"; # We escaped the `$` symbol with backslash to match literal '$'
spawn ssh  $user@$host
expect -nocase "password:"
send "$loginpwd\r"
expect -re $prompt
send "su\r"
expect -nocase "password:"
send "$adminpwd\r"
expect -re $prompt
send "mkdir /home/test\r"
expect -re $prompt
send "logout\r"
expect eof

eof 将等待 ssh 会话关闭。