因为工作关系,需要经常从线上机器上拉取数据,于是想着能否写个脚本,自动完成这个任务呢? 我一般使用scp在机器间传输文件,然而每次scp都需要输入密码,自动化脚本怎么解决这个问题呢?于是expect这款好用的交互工具就登场了。
安装:
rhel6.6下 yum install -y expect
使用:
expect {
"(yes/no)" { send "yes\r"; exp_continue }
"password:" { send "your-password\r" }
}
expect eof
exit
注意事项:
在使用expect的过程中,中了很多坑,下面一一列举:
- expect后面的大括号不得另起一行,否则expect解释器不识别
- 如果是第一次scp某台机器,需要针对(yes/no)进行处理,否则脚本将一直hang组(一直在等待password)
- 在输入完密码之后,需要执行expect eof; exit退出,否则脚本将一直hang住