如何用expect自动帮你发邮件(自动交互)
[root@localhost ~]# mail -s ddd root
vim sss.sh
#! /bin/bash
expect <<EOF (开头)
spawn ssh 192.168.4.11
expect "?" (这个问号的地方一定要跟命令行提示一模一样才行!!!!) {send "yes\n"} {发送 “yes” 回车}
expect "password" 期待“秘密 ” {send "123456\n"} {发送“123456”\n}
expect "#" (#号表示上一个执行完成了回车了) {send "touch /dev/123.txt\n" }
expect "#" {send "exit\n"}
EOF (结尾)
\r回车 \n换行
[root@server0 ~]# mail -s test root << EOF 写邮件
> test mail
> hell world
> EOF
通过循环批量操作,版本2:
[root@svr5 ~]# vim expect_ssh.sh
#!/bin/bash
for i in 10 11
do
expect << EOF
spawn ssh 172.25.0.$i #//创建交互式进程
expect "password:" { send "123456\n" } #//自动发送密码
expect "# { send "pwd > /tmp/$user.txt \n" } #//发送命令
expect "#" { send "exit\n" }
EOF
done
注意事项:
expect脚本的最后一行默认不执行
如果不希望ssh时出现yes/no的提示,远程时使用如下选项:
# ssh -o StrictHostKeyChecking=no server0