秘钥登录服务器执行shell脚本
发布时间:2020-12-15 06:39:42 所属栏目:Java 来源:网络整理
导读:做自动化的时候,有时候避免不了要和服务器有互动,刚巧碰上一个项目,需要执行命令才能完成本次测试。 昨天遇到的是秘钥形式的,只有秘钥和用户名,百度找了许久也没有思路,(能账号密码登录服务器的还简单些),后来看到一篇博文,受到启发,把他的代码改
做自动化的时候,有时候避免不了要和服务器有互动,刚巧碰上一个项目,需要执行命令才能完成本次测试。 昨天遇到的是秘钥形式的,只有秘钥和用户名,百度找了许久也没有思路,(能账号密码登录服务器的还简单些),后来看到一篇博文,受到启发,把他的代码改了又改,结果还真行了 代码如下: import com.jcraft.jsch.*; import org.slf4j.LoggerFactory; java.io.BufferedReader; java.io.IOException; java.io.InputStream; java.io.InputStreamReader; java.nio.charset.Charset; java.util.Properties; /** * @author * 秘钥形式登录服务器执行shell脚本操作 */ public class ExecuteShellWithKey { * slf4j */ private final static org.slf4j.Logger logger = LoggerFactory.getLogger(ExecuteShellWithKey.); private Session session; * 远程连接Linux 服务器 执行相关的命令 * * @param keyFile 秘钥文件 * userName 用户名 * passphrase 重置后密码 * host 主机ip * cmd 执行shell调用命令 * @throws JSchException * IOException */ void runShell(String keyFile,String userName,String passphrase,String host,String cmd) { if (!connect(keyFile,userName,passphrase,host)) { return; } ChannelExec channelExec = null; BufferedReader reader = ; try { channelExec = (ChannelExec) session.openChannel("exec"); channelExec.setCommand(cmd); channelExec.setInputStream(); channelExec.setErrStream(System.err); channelExec.connect(); InputStream in = channelExec.getInputStream(); reader = new BufferedReader(new InputStreamReader(in,Charset.forName("UTF-8"))); String buf = ; StringBuffer sb = new StringBuffer(); while ((buf = reader.readLine()) != ) { sb.append(buf); // 输出每个命令执行后,返回数据 logger.info(sb.toString()); } } catch (JSchException e) { e.printStackTrace(); } (IOException e) { e.printStackTrace(); } finally { { if (reader != ) { reader.close(); } } (IOException e) { e.printStackTrace(); } if (channelExec != ) { channelExec.disconnect(); } if (null != session) { session.disconnect(); } } } * 连接到指定的HOST * * keyFile * userName * passphrase * host * JSchException boolean connect(String keyFile,String host) { 创建JSch对象 JSch jsch = JSch(); 引入秘钥文件 jsch.addIdentity(keyFile); 根据用户名,主机ip,端口获取一个Session对象 session = jsch.getSession(userName,host,22); UserInfo ui = MyUserInfo(passphrase); session.setUserInfo(ui); 设置密码 session.setPassword(passphrase); Properties config = Properties(); config.put("StrictHostKeyChecking","no"); 为Session对象设置properties session.setConfig(config); int timeout = 60000000; 设置timeout时间 session.setTimeout(timeout); 通过Session建立链接 session.connect(); } (JSchException e) { e.printStackTrace(); logger.error("connect error !"return false; } true; } class MyUserInfo implements UserInfo { private String passphrase = ; public MyUserInfo(String passphrase) { this.passphrase = passphrase; } String getPassphrase() { String getPassword() { ; } promptPassphrase(String s) { promptPassword(String s) { promptYesNo(String s) { showMessage(String s) { logger.info(s); } } } ? 要是觉得对你有帮助,并且解决了你的问题,麻烦请高抬你发财的贵手,在评论给我个赞即可。。。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Java编程实现基于图的深度优先搜索和广度优先搜索完整代码
- The Java serialization algorithm revealed---reference
- Java集合Collention
- Java和whitespace-as-syntax(ala Python)?
- Java中随机数的产生方式与原理详解
- dplyr:选择除vector中包含的变量之外的所有变量
- JSP PageContext.handlePageException()方法:抛出异常
- JavaFX:从Memory清理TableView实例
- Jsoup解析html实现招聘信息查询功能
- java – 在RecyclerView中从ViewHolder调用活动?