我希望通过以下方式自动化流程:
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
如何修复代码以自动化我的流程?
答案 0 :(得分:0)
基本上,expect
将使用两个可行的命令,例如send
和expect
。在这种情况下,如果使用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会话的关闭。