/**
* 由SshConfig配置获取一个Session
* @param conf
* @return
*/
public static Session createSession(SshConfig conf){
LOG.info("try connect to " + conf.getHostIp() + ",username: " + conf.getUsername() + ",password: " + conf.getPassword() + ",port: " + conf.getPort());
JSch jSch=new JSch(); //创建JSch对象
Session session= null;//根据用户名,主机ip和端口获取一个Session对象
try {
session = jSch.getSession(conf.getUsername(), conf.getHostIp(), conf.getPort());
session.setPassword(conf.getPassword()); //设置密码
Properties config=new Properties();
//StrictHostKeyChecking no
//"StrictHostKeyChecking"如果设为"yes",ssh将不会自动把计算机的密匙加入"$HOME/.ssh/known_hosts"文件,且一旦计算机的密匙发生了变化,就拒绝连接
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);//为Session对象设置properties
session.setTimeout(conf.getTimeOut());//设置超时
session.connect();//通过Session建立连接
LOG.info("connect to {} success",conf.getHostIp());
} catch (JSchException e) {
LOG.error("connect to {} fail, connect infos:{}",conf.getHostIp(),conf.toString());
e.printStackTrace();
}
return session;
} /**
* 关闭session
* @param session
*/
public static void closeSession(Session session){
session.disconnect();
}
 /**
* 从src文件拿到本地dst文件
* @param session
* @param src
* @param dst
* @return
*/
public static Boolean downLoad(Session session,String src,String dst){
Boolean success=true;
//src linux服务器文件地址,dst 本地存放地址
ChannelSftp channelSftp= null;
try {
channelSftp = (ChannelSftp) session.openChannel("sftp");
channelSftp.connect();
channelSftp.get(src, dst);
channelSftp.quit();
} catch (JSchException e) {
success=false;
e.printStackTrace();
LOG.error(e.getMessage());
} catch (SftpException e) {
success=false;
e.printStackTrace();
LOG.error(e.getMessage());
}
return success;
}
/**
* 由ip 用户名 密码 获取该ip对应的hostname
* @param hostIp
* @param username
* @param password
* @return
*/
public static String getHostName(String hostIp, String username, String password){
Session session=createSession(new SshConfig(hostIp,username,password));
String hostname = exeCommand(session,"hostname");
return hostname.trim();
}
/**
* 执行command命令,把执行结果返回
* @param session
* @param command
* @return
*/
public static String exeCommand(Session session,String command){
ChannelExec channelExec = null;
String out=null;
try {
channelExec = (ChannelExec) session.openChannel("exec");
InputStream in = channelExec.getInputStream();
channelExec.setCommand(command);
channelExec.setErrStream(System.err);
channelExec.connect();
out = IOUtils.toString(in, "UTF-8"); channelExec.disconnect();
//session.disconnect();
} catch (JSchException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if(null==out){
LOG.error("execute {} error",command);
out="";
}
return out;
}
public class SshConfig {
private String hostIp;
private String username;
private String password;
//默认端口22
private int port=;
//10个小时超时
private int timeOut=***; public SshConfig(String hostIp, String username, String password) {
this.hostIp = hostIp;
this.password = password;
this.username = username;
} public String getHostIp() {
return hostIp;
} public void setHostIp(String hostIp) {
this.hostIp = hostIp;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public int getPort() {
return port;
} public void setPort(int port) {
this.port = port;
} public int getTimeOut() {
return timeOut;
} public void setTimeOut(int timeOut) {
this.timeOut = timeOut;
} @Override
public String toString() {
String builder="\nhostIp"+" : " + hostIp
+"\nusername"+" : " + username
+"\npassword"+" : " + password
+"\nport"+" : " + port
+"\ntimeOut"+" : " + timeOut;
return builder;
} }

3 windows环境与shell交互操作的更多相关文章

  1. python操作三大主流数据库(1)python操作mysql①windows环境中安装python操作mysql数据库的MySQLdb模块mysql-client

    windows安装python操作mysql数据库的MySQLdb模块mysql-client 正常情况下应该是cmd下直接运行 pip install mysql-client 命令即可,试了很多台 ...

  2. windows的类似shell 命令操作

    一,类似linux的grep命令 参考网站:https://www.cnblogs.com/zxy1992/p/4372717.html windows执行cmd命令查找sql进程: C:\Users ...

  3. Shell之操作环境

    目录 Shell之操作环境 参考 命令运行顺序 欢迎信息 环境配置 Shell之操作环境

  4. windows环境jar包部署到linux服务器,一键操作

    背景: windows系统下生成的jar包通过FTP上传到linux服务器,然后通过XShell进行jar包的发布,这样反复了几个月后,开发阶段需要频繁更新包的部署.个人觉得很繁琐,想一键式把这个工作 ...

  5. Shell及其操作环境

    来源: 鸟哥的Linux私房菜第十章.認識與學習BASH Shell是什么?1分钟理解Shell的概念! ssh在本地调用远程主机上的命令,不登录远程主机shell 一.Shell Shell 是一个 ...

  6. windows环境30分钟从0开始快速搭建第一个docker项目(带数据库交互)

    前言 小白直接上手 docker  构建我们的第一个项目,简单粗暴,后续各种概念边写边了解,各种概念性的内容就不展开,没了解过的点击 Docker 教程 进行初步了解. Docker 是一个开源的应用 ...

  7. 第十一章、认识与学习 BASH Bash Shell 的操作环境

    bash中的变量动不动就说环境变量,真是奇怪,bash只是一个c语言编写的程序而已,跟环境变量有什么关系?如果知道dos的历史的话就知道有个时代是只有命令行界面而没有图形用户界面,这只小小的程序就包揽 ...

  8. windows环境下protobuf的java操作{编译,序列化,反序列化}

    google protocol buffer的使用和原理 概况: Protocol Buffers(也就是protobuf)是谷歌的语言中立的.平台中立的.可扩展的用于序列化结构化的数据: windo ...

  9. windows环境下安装pymysql(操作带图)

    在windows环境下安装pymysql,首先要找到python的安装位置,如果在c盘,启动cmd的时候,要获取管理员权限. 具体步骤,一,管理员模式启动cmd.在箭头指定位置,搜索cmd,出现快捷方 ...

随机推荐

  1. WebStorm 使用快捷键大全

    1. ctrl + shift + n: 打开工程中的文件,目的是打开当前工程下任意目录的文件. 2. ctrl + j: 输出模板 3. ctrl + b: 跳到变量申明处 4. ctrl + al ...

  2. win8 在哪找画图工具

    把鼠标放在右上角,然后往下拉,出现搜索图标,如图: 在‘搜索’输入‘画图’ 打开即可使用.

  3. Web Server PROPFIND Method internal IP Discosure

    Title:Web Server PROPFIND Method internal IP Discosure  --2012-11-09 09:47 Nessus扫描出来一个安全缺陷,Web Serv ...

  4. How systems researchers build systems

    Define the problem >>Identify the constraints and abstract problem propose solution:simple ide ...

  5. pm2 安装使用

    pm2 是全新开发的进程守护服务, 同时集成了负载均衡功能. 以及开机启动, 自动重启有问题进程. 还可以查看各服务进程状态. 使用方法参照:https://github.com/Unitech/pm ...

  6. mobile优化

    原文: http://queue.acm.org/detail.cfm?id=2510122 译文: http://www.w3cfuns.com/forum.php?mod=viewthread&a ...

  7. Usage、Usage Minimum和Usage Maximum项目详解

    (1)一个产生多个数据域(Report Count>1)的主项目之前有一个以上的[用途]时,每个[用途]与一个数据域依次对应,如果数据域个数(Report Count)超过[用途]的个数,则剩余 ...

  8. 不建议用wxWidgets,底层有过多的bug

    不建议用wxWidgets, 搞了wxWidgets 3年,不是所说的那么容易跨平台,很多bug,不稳定, 莫名其妙的崩溃找源代码修改编译真是费时费力. 开发速度真没有使用本地sdk开发高, 很难定制 ...

  9. java IO和NIO的场景选择

    就使用上来说,传统的面向流的IO更简单,而面向缓冲(块)的NIO更复杂,因为可调整空间大,接口的概念性也更加低层(原生)些. 下面说说使用场景: IO的场景: 1.文件可能很多,但是size并不是那么 ...

  10. Linux系统编程(29)——线程间同步(续篇)

    线程间的同步还有这样一种情况:线程A需要等某个条件成立才能继续往下执行,现在这个条件不成立,线程A就阻塞等待,而线程B在执行过程中使这个条件成立了,就唤醒线程A继续执行.在pthread库中通过条件变 ...