java ssh_java ssh框架 - CSDN
精华内容
参与话题
  • JAVASSH框架

    万次阅读 2016-11-17 11:44:48
    最近刚开始学习Java后端的一些知识,很多不懂的或者要学习的记录在这里,希望自己学习的同时也能帮助一些别人,如果有什么不对的地方或者需要补充的也欢迎大家留言,我也会继续学习和修改的! 标签 一、Spring ...

    前言

    最近刚开始学习Java后端的一些知识,很多不懂的或者要学习的记录在这里,希望自己学习的同时也能帮助一些别人,如果有什么不对的地方或者需要补充的也欢迎大家留言,我也会继续学习和修改的!

    标签

    一、Spring

    Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。 Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的Inversion of Control容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。 Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了Hibernate和其他O/R mapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务--如果你需要--还能实现你自己的aspects。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了可以和IoC容器集成的强大而灵活的MVC Web框架。

    二、STRUCTS

    Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。

    三、Hibernate

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。映射很简单呀,就是页面的映射呀,多做点练习就会了。

    JAVA三大框架用来做WEN应用。 struts主要负责表示层的显示 spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作) hibernate主要是数据的持久化到数据库 在用jsp的servlet做网页开发的时候有个web.xml的映射文件,里面有个mapping的标签就是用来做文件映射的。 当你在浏览器上输入URL地址的时候,文件就会根据你写的名称对应到一个java文件,根据java文件里编写的内容显示在浏览器上,就是一个网页,所以网页名字是随便写的,随便起的名字,不管你起的是. php.jsp .do还是其他的什么都对应这个java文件,这个java文件里的代码进行什么操作就干什么,显示一句话还是连接数据库还是跳转到其他页面等等,这个java文件把数据进行封装起到安全和便于管理的作用。其实这个java文件编译过来是.class的一个字节码文件,没有那么一个类似html嵌入标签和代码的网页文件。他与jsp文件区别就是jsp把代码嵌入到html标签中。 还有servlet或者struts中html表单的action中的提交名称对应一个java文件,struts一般是.do的,都和上面一样是映射。


    SSH框架详细说明


    首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活、易于扩展的多层Web应用程序。


    集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层(实体层)。


    Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持Spring一方面作为一个轻量级的IoC容器,负责查找、定位、创建和管理对象及对象之间的依赖关系,另一方面能使StrutsHibernate更好地工作。

     

     

    SSH构建系统的基本业务流程是: 

    1在表示层中,首先通过JSP页面实现交互界面,负责传送请求(Request)和接收响应(Response),然后Struts根据配置文件(struts-config.xml)将ActionServlet接收到的Request委派给相应的Action处理。

    2在业务层中,管理服务组件的Spring IoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。

    3在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。


    采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离。这样无论前端如何变化,模型层只需很少的改动,并且数据库的变化也不会对前端有所影响,大大提高了系统的可复用性。而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。


    下面我们再详细看一下组成SSH的这三个框架

    一、Spring

    1、什么是Spring?

    简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

    2、Spring的特性

    具体自己百度吧

    所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码


    3、为什么使用Spring?

    Spring的以上特性使得开发人员使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。


    二、Struts

    1、什么是Struts?

    它通过采用 Java Servlet/JSP 技术,实现了基于Java EEWeb应用的MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品。


    2、Struts1的核心构成

     

    在 Struts1 中,由一个名为 ActionServlet 的 Servlet 充当 控制器(Controller)的角色,根据描述模型、视图、控制器对应关系的 struts-config.xml 的配置文件,转发视图(View)的请求,组装响应数据模型(Model)。

     

    在 MVC 的模型(Model)部分,经常划分为两个主要子系统(系统的内部数据状态与改变数据状态的逻辑动作),这两个概念子系统分别具体对应 Struts 1里的 ActionForm 与 Action 两个需要继承实现超类。在这里,Struts 1可以与各种标准的数据访问技术结合在一起,包括Enterprise Java Beans(EJB), JDBC 与 JNDI。

     

    在 Struts 1的视图(View) 端,除了使用标准的JavaServer Pages(JSP)以外,还提供了大量的标签库使用,同时也可以与其他表现层组件技术(产品)进行整合,比如 Velocity Templates,XSLT 等。

     

    通过应用 Struts 的框架,最终用户可以把大部分的关注点放在自己的业务逻辑(Action)与 映射关系的配置文件(struts-config.xml)中。

     

    3、Struts1的基本执行流程

    详见《STRUTS基本工作流程》

     

    4、什么是struts2

    Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品

     

    5、strut2的体系结构

     

     

    解析:

    当Web容器收到请求(HttpServletRequest)它将请求传递给一个标准的的过滤链包括  流程(ActionContextCleanUp)过滤器,然后经过Other filters(SiteMesh ,etc),

    接下来需要调用FilterDispatcher核心控制器,然后它调用ActionMapper确定请求那个Action,ActionMapper返回一个收集Action详细信息的ActionMaping对象。

    接下来FilterDispatcher将控制权委派给ActionProxy,ActionProxy调用配置管理器(ConfigurationManager) 从配置文件中读取配置信息(struts.xml),然后创建ActionInvocation对象,ActionInvocation在调用Action之前会依次的调用所用配置拦截器(Interceptor N) 一旦执行结果返回结果字符串ActionInvocation负责查找结果字符串对应的(Result)然后执行这个Result Result会调用一些模版(JSP)

    来呈现页面,之后拦截器(Interceptor N)会在被执行(顺序和Action执行之前相反)最后响应(HttpServletResponse)被返回在web.xml中配置的那些过滤器和(核心控制器)(FilterDispatcher)。

     

    6、为什么使用Struts?

    首先,Struts 是MVC的一种实现,它将 Servlet和 JSP 标记(属于 J2EE 规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展,减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化

     

    另外, struts具有页面导航功能,使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。

     

    7、 Struts1和Struts2的区别

    详见《Struts1 和 Struts2

     

    三、Hibernate

    1、什么是Hibernate?

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任

     

    2、Hibernate核心构成

     

    具体就不展开了

     

    3、Hibernate基本执行流程

     

     

    为什么使用Hibernate?

    1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

    2、Hibernate是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作,将软件开发人员从大量相同的数据持久层相关编程工作中解放出来,使开发更对象化了。

    3、移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了,不用改变hibernate代码。

    4、支持透明持久化,因为hibernate操作的是纯粹的(pojo)java类,没有实现任何接口,没有侵入性。所以说它是一个轻量级框架。

     

     

    最后附上SSH1和SSH2框架搭建的实例,点击即可下载

    SSH1框架搭建实例(spring2+struts1+hibernate3)采用旧版本,详见代码中注释

    SSH2框架搭建实例(spring3.2+strust2.3.4+hibernate4.2)全部采用最新版本,详见代码中注释

     

    开发环境搭建,参照另一篇博客

    《Win7(64) + eclipse(64)+ tomcat7(64)+ jdk7(64)开发环境配置》

     

     

    [html] view plain copy
     print?
    1.  一些说明:  
    2.   
    3. 索要代码的邮箱,我基本上都发过了,如果有漏发,请联系我。  
    4.   
    5.   
    6. 还是希望大家去csdn下载页去下载。如果速度慢,可以去这里http://pan.baidu.com/s/1eQh7FXo  
    7.   
    8.   
    9. 开发环境配置。http://blog.csdn.net/shan9liang/article/details/8807784  
    10.     
    11. 在war中,找到application-common.xml。修改数据源,指定自己的数据库即可。项目部署后,会自动映射表。  
    12.     
    13.     
    14. <!--配数据源 -->  
    15. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
    16. destroy-method="close">  
    17. <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />  
    18. <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />  
    19. <property name="username" value="ssh" />  
    20. <property name="password" value="ssh" />  
    21. </bean>     
    22. 以上是oracle的配置。   
    23. 如果使用其他数据库,请在lib目录下,加入驱动包。并修改数据源。   
    24. 强烈建议:  
    25. https://code.csdn.net/shan9liang/tgb  
    26. 这是在CSDN CODE托管的,采用ssh搭建的一个考勤管理系统,maven项目,比原来那个更规范了,建议用这个,而且我会持续更新,逐渐加入各种主流框架,相信我。  
    27. 。不过不是eclipse项目,需要手工导入eclipse,最近特喜欢用intellij。建议直接用git clone。  
    另附一个Eclipse搭建SSH(Struts2+Spring3+Hibernate3)框架项目教程的网址:

    http://blog.csdn.net/yeohcooller/article/details/9316923

    展开全文
  • java远程连接ssh的实现

    千次阅读 2019-02-25 11:51:47
    在开发或者测试的过程中,经常会登录到远程服务器上进行一系列操作(如目录跳转、脚本执行等);...jsch作为一种ssh2的纯java实现,能够允许我们连接到一个sshd 服务器,进而进行文件传输、文件下载...

            在开发或者测试的过程中,经常会登录到远程服务器上进行一系列操作(如目录跳转、脚本执行等);这些动作固定,但是每次重复操作会显得较为繁琐。基于此,开发出一个自动化脚本用以代替手工执行很有必要。

            这里给大家介绍一种基于java的远程ssh连接实现工具,jsch。jsch作为一种ssh2的纯java实现,能够允许我们连接到一个sshd 服务器,进而进行文件传输、文件下载等操作,能够很轻松的将ssh的功能集成到代码当中。关于ssh的基本原理,我就不再做过多介绍。接下来,介绍下工具的使用(自行在maven仓库中搜索jsch依赖)。

    1.新建jsch对象,作为基础句柄使用 

    JSch jsch = new JSch();

    2.根据用户名,主机ip,端口号获取一个session,与远程服务器建立一个会话连接

    session = jsch.getSession(userName, host, port);
    session.setPassword(passWord); // 设置密码
    session.setUserInfo(new MyUserInfo()); //需要实现Jsch包中的UserInfo,UIKeyboardInteractive接口,用以保存用户信息,以及进行键盘交互式认证并执行命令。
    Properties config = new Properties();
    config.put("StrictHostKeyChecking", "no");//在代码里需要跳过检测。否则会报错找不到主机
    session.setConfig(config); // 为Session对象设置properties
    int timeout = 30000;
    session.setTimeout(timeout); // 设置timeout时间
    session.connect(); // 通过Session建立与远程服务器的连接回话

    3.session建立之后,可以基于此,在远程服务器上执行shell以及文件上传下载操作了

       执行shell代码实现:

    ChannelExec channelExec = (ChannelExec) session.openChannel("exec");
    channelExec.setCommand(cmd);         //添加传入进来的shell命令
    channelExec.setInputStream(null);
    channelExec.setErrStream(System.err);//通道连接错误信息提示
    channelExec.connect();
    logger.info("start execute channel command!");
    BufferedReader in = new BufferedReader(new InputStreamReader(channelExec.getInputStream()));
    String msg;
    logger.info("start read!");
    while ((msg = in.readLine()) != null) {
        logger.info("命令返回信息:{}", msg);
    }
    in.close();
    channelExec.disconnect();
    logger.info("end execute channel command!");

     文件下载代码实现:

    ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");
    channelSftp.connect();
    logger.info("start download channel file!");
    channelSftp.cd(directory);
    File file = new File(saveDir);
    channelSftp.get(downloadFile, new FileOutputStream(file));
    logger.info("Download Success!");
    channelSftp.disconnect();
    logger.info("end execute channel sftp!");

     文件上传代码实现:

    ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");
    channelSftp.connect();
    logger.info("start upload channel file!");
    channelSftp.cd(directory);
    channelSftp.put(file.getInputStream(), file.getOriginalFilename());
    logger.info("Upload Success!");
    channelSftp.disconnect();
    logger.info("end execute channel sftp!");
    展开全文
  • java连接ssh服务

    千次阅读 2017-07-21 16:11:06
    public class Shell { private static Logger logger = Logger.getLogger(Shell.class); private String ip;//远程主机的IP地址 private String username;... private String password;... private int p
    public class Shell {
    	private static Logger logger = Logger.getLogger(Shell.class);
    	private String ip;//远程主机的IP地址
    	private String username;//远程主机的用户名
    	private String password;//远程主机的密码
    	private int port;//远程主机端口
    	public static final int DEFAULT_SSH_PORT = 22;
    	private ArrayList<String> stdout;//保存输出的内容
    	
    	public String getIp() {
    		return ip;
    	}
    	
    	public void setIp(String ip) {
    		this.ip = ip;
    	}
    	
    	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 ArrayList<String> getStdout() {
    		return stdout;
    	}
    	
    	public Shell() {
    		stdout = new ArrayList<String>();
    	}
    	
    	public Shell(final String ip, final String username, final String password) {
    		this.ip = ip;
    		this.username = username;
    		this.password = password;
    		stdout = new ArrayList<String>();
    	}
    	
    	public int execute(final String command) {
    		int returnCode = 0;
    		JSch jsch = new JSch();
    		Session session = null;
    		
    		try {
    			//创建session并且打开连接,因为创建session之后要主动打开连接
    			if (port == 0)
    				session = jsch.getSession(username, ip, DEFAULT_SSH_PORT);
    			else
    				session = jsch.getSession(username, ip, port);
    			
    			session.setPassword(password);
    			
    			//关闭主机密钥检查,否则会导致连接失败,重要!!!
    			Properties config = new Properties();
    			config.put("StrictHostKeyChecking", "no");
    			session.setConfig(config);
    			
    			logger.info("连接服务器" + session.getHost());
    			
    			session.connect();
    			//打开通道,设置通道类型,和执行的命令
    			Channel channel = session.openChannel("exec");
    			ChannelExec channelExec = (ChannelExec) channel;
    			channelExec.setCommand(command);
    			
    			channelExec.setInputStream(null);
    			BufferedReader input = new BufferedReader(new InputStreamReader((channelExec.getInputStream())));
    			channelExec.connect();
    			logger.info("The remote command is:" + command);
    			//接受远程服务器执行命令的结果
    			
    			String line = null;
    			logger.info("stdout信息开始打印");
    			while ((line = input.readLine()) != null) {
    				stdout.add(line);
    				logger.info(line);
    			}
    			logger.info("stdout信息打印结束");
    			input.close();
    			
    			//得到returnCode
    			if (channelExec.isClosed())
    				returnCode = channelExec.getExitStatus();
    			
    			//关闭通道
    			channelExec.disconnect();
    			//关闭session
    			session.disconnect();
    			
    		} catch (JSchException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		return returnCode;
    	}
    	
    	@Test
    	public void run() {
    		
    		Shell shell = new Shell();
    		shell.setIp("10.59.81.11");
    		shell.setUsername("www");
    		shell.setPassword("www");
    		shell.setPort(22);
    		logger.info(shell.execute("ls -l"));
    		
    	}
    }
    

    展开全文
  • JAVA调用SSH命令

    万次阅读 2006-08-17 14:36:00
    (1) SSH命令使用手册SSH 的详细使用方法如下:ssh [-l login_name] [hostname | user@hostname] [command] ssh [-afgknqtvxCPX246] [-c blowfish | 3des] [-e escape_char] [-i identity_file] [-l login_name] ...
     
    
    (1)       SSH命令使用手册
    SSH 的详细使用方法如下:
    ssh [-l login_name] [hostname | user@hostname] [command] ssh [-afgknqtvxCPX246] [-c blowfish | 3des] [-e escape_char] [-i identity_file] [-l login_name] [-o option] [-p port] [-L port:host:hostport] [-R port:host:hostport] [hostname | user@hostname] [command]
    sshd
    为执行 ssh 的 daemon,在读者使用 ssh 之前必须去激活 sshd,在此建议把它加在 /etc/init/rc.local 中,在每次开机时激活。
    在执行 sshd 之前可以指定它的 port,例如:sshd –p 999
    若有安装 SSL,可以指定 SSL 的 port 443,例如:sshd –p 443
    这样就可以经过 SSL 及 SSH 双重的保护,但必须去指明使用的 port
    ssh –l user –p 443 mouse.oit.edu.tw 才行,若不指明则仍然使用预设的port 22
    ssh
    选项:
    -l login_name
    指定登入于远程机器上的使用者,若没加这个选项,而直接打 ssh lost 也是可以的,它是以读者目前的使用者去做登入的动作。例如: ssh –l shie mouse.oit.edu.tw
    -c blowfish|3des
    在期间内选择所加密的密码型式。预设是3des,3des(作三次的资料加密) 是用三种不同的密码键作三次的加密-解密-加密。 blowfish 是一个快速区块密码编制器,它比3des更安全以及更快速。
    -v
    Verbose 模式。使ssh 去印出关于行程的除错讯息,这在连接除错,认 证和设定的问题上有很的帮助。
    -V
    显示版本。
    -a
    关闭认证代理联机。
    -f
    要求ssh 在背景执行命令,假如ssh要询问密码或通行证,但是使用者 想要它在幕后执行就可以用这个方式,最好还是加上-l user 例如在远程场所上激活 X11,有点像是 ssh –f host xterm 。
    -e character
    设定跳脱字符。
    -g
    允许远程主机去连接本地指派的 ports。
    -i identity_file
    选择所读取的 RSA 认证识别的档案。预设是在使用者的家目录 中的 .ssh/identity 。
    -n
    重导 stdin 到 /dev/null (实际上是避免读取 stdin)。必须当 ssh 在幕后执行时才使用。常见的招数是使用这选项在远程机器上去执行 X11 的程序 例如,ssh -n shadows.cs.hut.fi emacs &amp;,将在 shadows.cs.hut.fi 上激活 emace,并且 X11 连接将自动地在加密的信道上发送。ssh 程序将把它放 在幕后。(假如ssh需要去询问密码时,这将不会动作)
    -p port
    连接远程机器上的 port。
    -P
    使用非特定的 port 去对外联机。如果读者的防火墙不淮许从特定的 port去联机时,就可以使用这个选项。注意这个选项会关掉 RhostsAuthentication 和 RhostsRSAAuthentication。
    -q
    安静模式。把所有的警告和讯息抑制,只有严重的错误才会被显示。
    -t
    强制配置 pseudo-tty。这可以在远程机器上去执行任意的 screen-based 程 式,例如操作 menu services。
    -C
    要求压缩所有资料(包含 stdin, stdout,stderr 和 X11 和 TCP/IP 连接) 压缩演算规则与 gzip 相同,但是压缩的等级不能控制。在调制解调器或 联机速度很慢的地方,压缩是个很好的选择,但如果读者的网络速路很 快的话,速度反而会慢下来。
    -L listen-port:host:port
    指派本地的 port 到达端机器地址上的 port。
    -R listen-port:host:port
    指派远程上的 port 到本地地址上的 port。
    -2 强制 ssh 去使用协议版本 2。
    -4 强制 ssh 去使用 IPv4 地址。
    -6 强制 ssh 去使用 IPv6 地址。
    scp
    使用 scp 在远程机器上 copy 档案
    例如:
    copy 本地的档案到远程的机器上
    scp /etc/lilo.conf k@net67.ee.oit.edu.tw:/home/k
    会将本地的 /etc/lilo.conf 这个档案 copy 到 net67.ee.oit.edu.tw,使用者 k 的家目录下。
    copy远程机器上的档案到本地来
    scp k@net67.ee.oit.edu.tw:/etc/lilo.conf /etc
    会将 net67.ee.oitdu.tw 中 /etc/lilo.conf 档案 copy 到本地的 /etc 目录下。
    保持从来源 host 档案的属性
    scp –p k@net67.ee.tw:/etc/lilo.conf /etc
    在此必须注意使用者的权限是否可读取远程上的档案,若想知道更多关于 scp 的使用方法,可去看看 scp 的使用手册。
    ssh-keygen
    产生公开钥 (pulib key) 和私人钥 (private key),以保障 ssh 联机的安性, 当 ssh 连 shd 服务器,会交换公开钥上,系统会检查 /etc/ssh_know_hosts 内储存的 key,如果找到客户端就用这个 key 产生一个随机产生的session key 传给服务器,两端都用这个 key 来继续完成 ssh 剩下来的阶段。
     
    它会产生 identity.pub、identity 两个档案,私人钥存放于identity,公开钥存放于 identity.pub 中,接下来使用 scp 将 identity.pub copy 到远程机器的家目录下.ssh下的authorized_keys。 .ssh/authorized_keys(这个 authorized_keys 档案相当于协议的 rhosts 档案),之后使用者能够不用密码去登入。RSA的认证绝对是比 rhosts 认证更来的安全可靠。
    执行:
    scp identity.pub k@linux1.ee.oit.edu.tw:.ssh/authorized_keys
     
    若在使用 ssh-keygen 产生钥匙对时没有输入密码,则如上所示不需输入密码即可从 net67.ee.oit.edu.tw 去登入 linux1.ee.oit.edu.tw。在此,这里输入的密码可以跟帐号的密码不同,也可以不输入密码。
    (2)       JAVA与SSH的交互
    由于在使用SSH命令时,中间要求输入用户密码,在设计JAVA程序时如果用Runtime的exec方法进行交互,经查证不可行。不过http://www.ganymed.ethz.ch/ssh2/提供了调用ssh和scp命令的jar,通过把用户名和密码传入api中就不需要用户介入输入密码。
    package com.corp.prj.util;
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
     
    import org.apache.log4j.Logger;
     
    import ch.ethz.ssh2.Connection;
    import ch.ethz.ssh2.SCPClient;
    import ch.ethz.ssh2.Session;
    import ch.ethz.ssh2.StreamGobbler;
     
    /**
     * Provides static methods for running SSH, scp as well as local commands.
     *
     */
    public class CommandRunner {
     private static final Logger logger = Logger.getLogger(CommandRunner.class);
     
     private CommandRunner() {
     }
     
     /**
      * Get remote file through scp
       * @param host
       * @param username
       * @param password
       * @param remoteFile
       * @param localDir
       * @throws IOException
       */
     public static void scpGet(String host, String username, String password,
          String remoteFile, String localDir) throws IOException {
        if (logger.isDebugEnabled()) {
          logger.debug("spc [" + remoteFile + "] from " + host + " to " + localDir);
        }
        Connection conn = getOpenedConnection(host, username, password);
        SCPClient client = new SCPClient(conn);
        client.get(remoteFile, localDir);
        conn.close();
     }
     
     /**
       * Put local file to remote machine.
       * @param host
       * @param username
       * @param password
       * @param localFile
       * @param remoteDir
      * @throws IOException
       */
     public static void scpPut(String host, String username, String password,
          String localFile, String remoteDir) throws IOException {
        if (logger.isDebugEnabled()) {
          logger.debug("spc [" + localFile + "] to " + host + remoteDir);
        }
        Connection conn = getOpenedConnection(host, username, password);
        SCPClient client = new SCPClient(conn);
        client.put(localFile, remoteDir);
        conn.close();
     }
     
     /**
       * Run SSH command.
       * @param host
       * @param username
       * @param password
       * @param cmd
       * @return exit status
       * @throws IOException
       */
     public static int runSSH(String host, String username, String password,
          String cmd) throws IOException {
        if (logger.isDebugEnabled()) {
          logger.debug("running SSH cmd [" + cmd + "]");
        }
     
        Connection conn = getOpenedConnection(host, username, password);
        Session sess = conn.openSession();
        sess.execCommand(cmd);
     
        InputStream stdout = new StreamGobbler(sess.getStdout());
        BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
     
        while (true) {
          // attention: do not comment this block, or you will hit NullPointerException
          // when you are trying to read exit status
          String line = br.readLine();
          if (line == null)
            break;
          if (logger.isDebugEnabled()) {
            logger.debug(line);
          }
        }
     
        sess.close();
        conn.close();
        return sess.getExitStatus().intValue();
     }
     
     /**
       * return a opened Connection
       * @param host
       * @param username
       * @param password
       * @return
       * @throws IOException
       */
     private static Connection getOpenedConnection(String host, String username,
          String password) throws IOException {
        if (logger.isDebugEnabled()) {
          logger.debug("connecting to " + host + " with user " + username
              + " and pwd " + password);
        }
     
        Connection conn = new Connection(host);
        conn.connect(); // make sure the connection is opened
        boolean isAuthenticated = conn.authenticateWithPassword(username,
            password);
        if (isAuthenticated == false)
          throw new IOException("Authentication failed.");
        return conn;
     }
     
     /**
       * Run local command
       * @param cmd
       * @return exit status
       * @throws IOException
       */
     public static int runLocal(String cmd) throws IOException {
        if (logger.isDebugEnabled()) {
          logger.debug("running local cmd [" + cmd + "]");
        }
     
        Runtime rt = Runtime.getRuntime();
        Process p = rt.exec(cmd);
     
        InputStream stdout = new StreamGobbler(p.getInputStream());
        BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
     
        while (true) {
          String line = br.readLine();
          if (line == null)
            break;
          if (logger.isDebugEnabled()) {
            logger.debug(line);
          }
     
        }
        return p.exitValue();
     }
    }
     
    展开全文
  • Java(整合SSH框架)

    千次阅读 2019-08-23 01:30:13
    一.SSH整合方式一:无障碍整合 二.SSH整合方式二:将hibernate的配置交给Spring管理 三.Hibernate的模板的使用 四.单元测试 五.延迟加载问题的解决 一.SSH整合方式一:无障碍整合 第一步:创建web项目,引入...
  • Java三大框架SSH简介

    万次阅读 2018-07-02 17:24:18
    在这里我们讲述一些关于Java的程序框架,这样能够帮助全球的开发人员减少日常的工作。 框架相当于一个工具,比如你在挖矿的时候,需要一把铲子,和一个动作,框架就是这把铲子和动作。在现在看来,Java还是一门比较...
  • JAVA SSH2工具类

    千次阅读 2018-12-11 23:04:58
    计划 ssh2utils ...使用java进行ssh 操作,执行脚本,scp文件的包装 依赖 &lt;!-- https://mvnrepository.com/artifact/com.trilead/trilead-ssh2 --&gt; &lt;dependency&gt; ...
  • JAVAssh常用的一些库

    万次阅读 2013-10-28 14:18:13
    通过javassh来操作远程服务器其在一些系统中是需要实现的功能。 现存的都有哪些库呢?最常用的如下: 1. JSch URL:http://www.jcraft.com/jsch/ 支持SSH,SFTP,SCP 2.Ganymed SSH-2 for Java URL:...
  • Ganymed SSH-2 for Java是用纯Java实现SSH-2协议的一个包。可以利用它直接在Java程序中连接SSH服务器。Ganymed SSH-2支持SSH对话(远程命令执行和shell访问),本地和远程端口转发,本地数据流转发,X11转发和SCP。...
  • JAVA利用SSH2登录LINUX并执行命令

    千次阅读 2017-03-16 19:09:51
    import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.Session; import ch.ethz.ssh2.StreamGobbler; import cn.com.bsfit.frms.portal.util.RemoteExecCmd; import org.junit.Test; import java.io.BufferedReade
  • Java通过SSH连接Linux服务器

    万次阅读 2016-05-18 17:06:59
    Java通过SSH连接Linux服务器 Window系统连接Linux服务器一般情况下需要使用Xshell去连接,但是如果只是执行一个简单并且重复的命令时,使用Xshell就显得大材小用了,并且操作会比较繁琐。如果能够使用简单的java...
  • Java中实现SSH2/SCP/SFTP/FTP操作

    千次阅读 2012-02-03 11:38:09
    支持SSH2/SCP/SFTP/FTP操作的开源java库有以下几个: 1. Ganymed SSH-2 for Java. BSD style license. "Ganymed SSH-2 for Java is a freely available open-source library which implements the SSH-2 ...
  • java使用ssh连接Linux并执行命令

    万次阅读 2016-08-29 18:48:32
    需依赖jcraft的jar包。可自行下载或者通过maven下载。 maven pom.xml配置: ... jsch  0.1.53   java代码如下: import java.io.IOException; import java.io.InputStream; import org.apache
  • Java SSH获取服务器文件内容

    千次阅读 2016-09-18 16:03:49
    需要导入jar:j2ssh-core-0.2.9.jarimport java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.OutputStream...
  • Java利用ssh工具远程执行shell脚本

    千次阅读 2012-09-21 15:34:36
    1.首先下载ganymed-ssh2.jar http://www.ganymed.ethz.ch/ssh2 2.SSHUtil工具类 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; ...
  • SSH 在本地执行远程机器上的命令

    万次阅读 2011-03-30 20:29:00
    在本地使用 ssh $RemoteNode 可以在执行远程机器上的命令,例如 ssh user@node ls /local 会执行远程机器上的 ls /local 命令,如果想在远程机器上连续执行多条命令,可以用单引号或者双引号将这些命令括起来,...
  • 报错如下: [ERROR]upload.SSHThread2016-01-2618:37:45,825:CreatesshsessionFailed!!ip=132.90.101.8,username=pnms ...com.jcraft.jsch.JSchException:Session.connect:java.security.InvalidAlgorithmPara...
  • Java代码实现ssh连接Linux

    千次阅读 2016-12-15 19:46:17
    import java.util.Arrays; import java.util.HashMap; import java.util.Map; import org.apache.sshd.client.SshClient; import org.apache.sshd.client.channel.ChannelShell; import org.apache.sshd.cl
  • Java使用SSH远程访问Windows并执行命令

    万次阅读 2016-08-29 18:39:53
    转载至:... windows由于没有默认的ssh server,因此在允许ssh之前需要先安装ssh server。 下载freeSSHd http://www.freesshd.com/?ctt=download 安装 直接执行freeSSHd.exe就可以进行安装
  • Java通过SSH2协议运行远程程序

    万次阅读 2009-11-17 20:05:00
    我使用Ganymed库,访问http://www.ganymed.ethz.ch/ssh2/网页,下载...然后在我们的Java应用程序中,加入Ganymed-ssh2-build2库。假定我在192.168.0.110的UBuntu Server 9.04系统的/home/chenshu目录下放了一个文件夹t
1 2 3 4 5 ... 20
收藏数 151,904
精华内容 60,761
关键字:

java ssh