java expect_Java调用expect、shell脚本时,明文密码处理与Expect使用举例
Expect概述
Expect是一个用来实现自动交互功能的软件套件 (Expect [is a] software suite for automating interactive tools)
Expect使用
Expect通过匹配关键字自动推送参数到脚本中,将人机交互操作转化为自动执行。
1.基本例子(设置文件权限)
#!/usr/bin/expect -f
set timeout 10
set dbf_dir [lindex $argv 0]
set passwd [lindex $argv 1]
spawn su - oracle
expect "*Password*"
send "$passwd\r"
expect ">"
send "chmod 750 $dbf_dir/tbs_test_*.dbf\r"
expect ">"
send "exit\r"
expect eof
2.明文密码处理(敏感参数通过流的方式传递到脚本中,ps -ef获取到的进程信息中便不会显示敏感信息)
expect脚本获取敏感参数
expect_user -re "(.*)\n"
set oracle_passwd $expect_out(1,string)
shell脚本获取敏感参数
INPUT_PWD=""
read -p "Enter Password :" INPUT_PWD
expect举例
#!/usr/bin/expect -f
set timeout 10
set ip_addr [lindex $argv 0]
spawn ssh oracle@$ip_addr
expect_user -re "(.*)\n"
set oracle_passwd $expect_out(1,string)
expect {
"Are you sure you want to continue connecting" {
send "yes\r"
expect "*Password*"
send "$oracle_passwd\r"
}
"*Password*" {
send "$oracle_passwd\r"
}
}
expect ">"
send "sqlplus / as sysdba\r"
expect ">"
send "purge dba_recyclebin;\r"
expect ">"
send "exit\r"
expect ">"
send "exit\r"
expect eof
//调用脚本,传入敏感参数的公共类
public static int executeCmd(String cmdType, String cmdFile, List normalParas, List pwdParas)
{
int result = 0;
try
{
ArrayList allParas = new ArrayList();
allParas.add(cmdType);
allParas.add(cmdFile);
allParas.addAll(normalParas);
ProcessBuilder builder = new ProcessBuilder();
builder.command(allParas);
Process process = builder.start();
OutputStream os = process.getOutputStream();
for (int i = 0; i < pwdParas.size(); i++)
{
os.write((pwdParas.get(i) + "\n").getBytes("UTF-8"));
}
os.flush();
StreamGobbler errorGobbler = new StreamGobbler(process.getErrorStream(), "ERROR");
errorGobbler.start();
StreamGobbler outGobbler = new StreamGobbler(process.getInputStream(), "STDOUT");
outGobbler.start();
result = process.waitFor();
}
catch (Exception e){...}
return result;
}
//调用方式
RuntimeUtil.executeCmd("expect", "脚本路径", normalParas, pwdParas);
//读取输出流的公共类
public class StreamGobbler extends Thread
{
private static final int MAX_BLOCK_SIZE = 8192;
private static final int INPUT_BUFFER_SIZE = 2048;
InputStream is;
String type;
public StreamGobbler(InputStream isPt, String typePt)
{
this.is = isPt;
this.type = typePt;
}
public void run()
{
BoundedInputStream bisPt = null;
BufferedReader brPt = null;
try
{
bisPt = new BoundedInputStream(is, StreamGobbler.MAX_BLOCK_SIZE);
brPt = new BufferedReader(new InputStreamReader(bisPt, "UTF-8"), StreamGobbler.INPUT_BUFFER_SIZE);
while ((brPt.readLine()) != null)
{//NOPMD
}//NOPMD
}
catch (IOException ioe){...}
finally
{
if (brPt != null)
{
try
{
brPt.close();
}
catch (IOException e){...}
}
if (bisPt != null)
{
try
{
bisPt.close();
}
catch (IOException e){...}
}
}
}
}
java expect_Java调用expect、shell脚本时,明文密码处理与Expect使用举例相关推荐
- linux js脚本无法响应,执行Linux shell脚本时出错
我想执行一个shell脚本来在dhtmlx实时更新的框架中启动nodejs服务器.根据dhtmlx文档,nodejs服务器将被放入web根目录.我已经写了位于/ var/WWW(其中的NodeJS文件 ...
- Java程序定时执行shell脚本
第一次写博客,写的不好还请见谅. 之前在Linux环境中想定期执行某个脚本,第一反应就是将这个task加入到crontab里(crontab的知识点这里就不具体介绍了),当然,这种做法一般情况下是可行 ...
- Shell中要如何调用别的shell脚本
在Shell中要如何调用别的shell脚本,或别的脚本中的变量,函数呢? 方法一: . ./subscript.sh 方法二: source ./subscript.sh 转载于:https://bl ...
- java grabcut_求教,在用OpenCV java接口调用GrabCut图像分割函数时出现错误
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 求教,在用OpenCV java接口调用GrabCut图像分割函数时出现错误 代码为: import org.opencv.core.*; import ...
- python 调用shell 不阻塞_遇到问题---python调用shell脚本时subprocess.check_call不阻塞
遇到的问题 使用命令 subprocess.check_call(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) ...
- java -jar 停止_推荐:Linux启动Java程序jar包Shell脚本
每次启动Java程序jar包的时候,难道你还在手敲java -jar xxserver.jar--?边敲边想着都需要追加哪些参数? 今天就推荐给大家一个几乎通用的Shell脚本,它支持Java程序Ja ...
- linux启动java jar文件_推荐:Linux启动Java程序jar包Shell脚本
#!/bin/sh# 该脚本为Linux下启动java程序的脚本## author: luandy# date: 2021/1/15## 特别注意:# 该脚本使用系统kill命令来强制终止指定的jav ...
- php调用shell脚本安全,从PHP调用的shell脚本问题
TLDR; 我有一个shell脚本,从命令行运行时工作正常,但如果从PHP脚本中调用(通过Web访问)则不行. 在这两种情况下,主叫用户都是www-data. 线路失败是这样的: openssl ge ...
- Unity调用外部Shell脚本或exe
有时候项目里需要执行一些shell脚本,来完成诸如文件移动,命令行打包,自己转换文件 格式什么的工作,省去一些手工劳动,然后这时候就需要用shell了. 网上也有一些关于调用方法的文章,这里就说一下我 ...
最新文章
- VS中的 MD/MT设置
- Java开发-Redis客户端Jedis
- 使用SAP Cloud Platform fullstack WebIDE创建SAP UI5应用并部署
- font face如何导入自定义字体
- Linux基础篇_01_计算机概论
- MySQL之练习题5
- 通俗易懂!视觉slam第五部分——slam数学表示二
- spring boot入门之——2.0新特性以及模块化构建
- 迷你linux主机,ECS推出两款迷你主机新品:支持Linux系统,可输出4K视频
- 点云入门笔记(一):点云数据及获取
- Ionic 安卓兼容性问题解决
- Unity获取摄像机的视口区域(透视相机模式)
- 【小程序】IDEA实现qq邮件的发送
- 《聪明人和傻子和奴才》鲁迅
- 移动应用中的AR开发,6款最受欢迎工具推荐
- 极速进阶,小i智慧学堂联合复旦大学教授推出人工智能冬令营
- 品Spring:详细解说bean后处理器
- codevs奇怪的梦境(拓扑排序)
- sota和fota区别_SOTA与FOTA的区别
- VB编写简易动态按钮控件
热门文章
- Python绘画五角星
- 创新型金融产品“续期宝”——互联网平台建设系列...
- JZOJ5937. 【NOIP2018模拟10.30】斩杀计划
- MyBatis框架的作用
- Html form表单小知识method action multiple selected checked type=password/text/submit/reget/radio/checkbox
- ffmpeg解码内存缓冲区
- python五子棋大作业报告_Python 大作业之五子棋游戏(附代码)
- 科沃斯扫地机器人风扇模块_科沃斯扫地机风扇不转不能关机等故障处理办法
- 大道至简,看数睿数据企业级无代码里的场景化智能
- JavaScript change 事件