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

时间:2015-08-08 05:26:43

标签: shell expect

我希望通过以下方式自动化流程:
1.在ssh中使用普通用户登录 2.su到root
3.make diretory /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

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

1 个答案:

答案 0 :(得分:0)

基本上,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会话的关闭。