`
yangjizhong24
  • 浏览: 399115 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java中使用ssh方式获取服务器的文件到本地

阅读更多
package com.chinacahe.LogContrast.ssh;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;


import org.apache.commons.io.FileUtils;
import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.SCPClient;

import com.chinacahe.LogContrast.base.LognameIntoDB;
import com.chinacahe.LogContrast.base.RemoteFileGetter;
import com.chinacahe.LogContrast.Constants;

public class SPZRemoteFileGetter implements RemoteFileGetter{

	Logger logger = Logger.getLogger(getClass());
	private String ip;
	private int port;
	private String path;
	private String dev_id;
	private String dev_name;
	private String date;


	ApplicationContext context = new ClassPathXmlApplicationContext(
			new String[] { "classpath*:applicationContext*.xml" });


	public void getRemoteFile() {
		
		
		LognameIntoDB lognameIntoDB=(LognameIntoDB)context.getBean("lognameIntoDB");
		
		
		Connection connection = null;
		List<String> lognames=new ArrayList<String>();
		try {
			connection = new Connection(ip, port);//远程服务器IP,端口
			connection.connect();//建立连接
			boolean isAuthenticated = connection.authenticateWithPassword(
					Constants.LOGIN_USER, Constants.LOGIN_PASSWORD);//服务器用户名,密码
			if (!isAuthenticated) {
				throw new IOException("Authentication Failed.");
			}
			
			logger.info("Connecting to "+ ip + ":" + port + "successful");
			SCPClient client = new SCPClient(connection);
		
				try{
					String servlogname=new File(path).getName();//path是服务器的文件名路径
					client.get(path, Constants.TEMP_DIR+ File.separator);//Constants.TEMP_DIR+ File.separator:要存入的本地目录
					
					if(new File(Constants.TARGET_DIR+File.separator + servlogname).exists()){

						new File(Constants.TARGET_DIR+File.separator + servlogname).delete();
						
					}
					FileUtils.moveFileToDirectory(
							new File(Constants.TEMP_DIR+ File.separator + servlogname),
							new File(Constants.TARGET_DIR),
							false);
					
									}
				catch(Exception e){
					logger.info("catching file "+ ip + ":" + port + ":" + path + " failed " + e.getMessage());
				}
			
			
			logger.info("Finished "+ ip + ":" + port);
			
		}
		catch(Exception e){
			logger.info("Failed connecting to "+ ip + ":" + port);
			
		}
		finally{
			if(connection != null){
				connection.close();
			}
		}
		
		
	}

	public void run() {
		getRemoteFile();
	}
	
	
	public  List<String> parseFiletoList(String filename){
		
		File file = new File(Constants.TARGET_DIR+ File.separator + filename);
		List<String> lognames=new ArrayList<String>();
		
		
			try {
			
				
				InputStream is = new FileInputStream(file);
				
				BufferedReader reader = new BufferedReader(new InputStreamReader(is));
				
				String line;
				int index = 0;
				while ((line = reader.readLine()) != null) {
					index++;
					lognames.add(line);
					
				}
				
				
			} catch (Exception e) {
				e.printStackTrace();
			}
		
		return lognames;
		
	}
	
	public String getIp() {
		return ip;
	}

	public void setIp(String ip) {
		this.ip = ip;
	}

	public int getPort() {
		return port;
	}

	public void setPort(int port) {
		this.port = port;
	}
	public String getPath() {
		return path;
	}

	public void setPath(String path) {
		this.path = path;
	}
	public String getDev_id() {
		return dev_id;
	}

	public void setDev_id(String devId) {
		dev_id = devId;
	}

	public String getDev_name() {
		return dev_name;
	}

	public void setDev_name(String devName) {
		dev_name = devName;
	}
	public String getDate() {
		return date;
	}

	public void setDate(String date) {
		this.date = date;
	}




}

 

 

 

执行远程服务器的系统命令并获取内容:

boolean isAuthenticated = connection.authenticateWithPassword(user, password);

	
			logger.info("Connecting to " + ip + ":" + port + "successful");

			Session sess = connection.openSession();

			sess.execCommand("/usr/local/squid/bin/rotateBilling.sh -v");

			InputStream stdout = new StreamGobbler(sess.getStdout());

			BufferedReader br = new BufferedReader(new InputStreamReader(stdout));

			StringBuffer sb = new StringBuffer();
			while (true) {

				String line = br.readLine();
				if (line == null)
					break;
				sb.append(line);

			}
			if (sb.toString().indexOf("0.0.4") < 0) {
				sess.close();
				connection.close();
				logger.error(selectdev + ":" + dev_name + ":" + ip + ":" + errortime
						+ ": shell file version isn't 0.0.4");
				return;
			}
			sess.close();

 

 

 

 

分享到:
评论
1 楼 baishui2004 2012-08-10  
您好,我使用Orion SSH2执行启动Tomcat的命令,提示需要JRE_HOME或JAVA_HOME,但是这环境变量已配置,且我通过SSH Secure Shell却可以启动成功。是不是Orion SSH2执行的命令不能识别环境变量,如何解决?多谢。

相关推荐

    java上传文件到linux服务器,操作linux服务器上文件,下载linux服务器文件,删除linux服务器文件

    在Java中,可以使用ganymed-ssh2库来实现在Linux服务器上上传文件。这个库提供了SSH2协议的实现,包括SFTP(Secure File Transfer Protocol)功能。首先,需要添加ganymed-ssh2的依赖到项目中,然后创建一个`...

    java代码在window获取linux文件

    这就是使用Java和JSch在Windows上获取Linux服务器文件的基本流程。在实际项目中,可能需要处理异常,增加重试机制,优化性能,甚至考虑使用密钥对认证,而不是密码。在提供的`RemoteGet`示例文件中,可能包含了完整...

    使用Java向服务器上传文件压缩包并实现解压缩

    在这个场景中,我们关注的是如何使用Java来实现文件压缩包的上传以及在服务器上的解压缩。Java作为一种强大的编程语言,提供了丰富的库来支持这样的操作,特别是在涉及到SFTP(Secure File Transfer Protocol)时,...

    SSH2 java连接远程服务器框架

    SSH(Secure Shell)是一种网络协议,用于在不安全的...通过以上步骤,你可以使用Java的SSH2框架(如JSch)连接到远程服务器,执行命令和传输文件。这在自动化运维、远程脚本执行、文件同步等多个场景中都非常实用。

    java连接服务器,对服务器命令操作,文件上传和文件下载工具

    本篇文章将深入探讨如何使用Java连接服务器,执行命令,进行文件上传和下载,并结合Sigar库来获取系统信息。 一、Java连接服务器与执行命令 在Java中,我们可以使用JSch库来实现SSH(Secure Shell)连接,从而远程...

    SFTP定时扫描本地文件上传到Linux服务器

    【标题】"SFTP定时扫描本地文件上传到Linux服务器"涉及的关键知识点主要集中在SFTP(Secure File Transfer Protocol)协议的使用、文件系统的监控以及自动化任务的执行。SFTP是一种安全的网络协议,用于在不同主机...

    用JAVA调用ssh命令

    在IT行业中,SSH(Secure Shell)是一种网络协议,用于安全地远程登录到服务器,执行命令以及传输文件。本文将深入探讨如何使用Java调用SSH命令,以便在开发过程中实现自动化运维或者远程操作。 首先,我们需要了解...

    Ganymed SSH-2 for Java

    5. **执行远程命令**:使用Ganymed SSH-2库,开发者可以在Java代码中直接执行远程主机上的命令,这对于自动化运维、远程监控或者分布式系统中的数据交换非常有用。 在使用Ganymed SSH-2库时,开发者需要创建`...

    ssh上传下载

    首先,SSH框架在Java中的应用主要依赖于库,如JSch(Java Secure Channel),它是一个纯Java实现的SSH2库,提供了连接到SSH服务器、执行命令、上传/下载文件等功能。使用JSch,你可以创建一个Session对象来建立与...

    java 从ftp服务器下载文件

    1. **异常处理**:代码中使用了try-catch块来捕获并处理可能出现的`IOException`异常。 2. **资源释放**:确保在finally块中释放连接资源,即使发生异常也能正确关闭连接。 3. **安全性考虑**:实际生产环境中应避免...

    SSH三种登录方式,带验证码。

    在SSH中使用Kerberos,需要预先配置Kerberos服务器和客户端。 1. 设置Kerberos服务器,包括KDC(Key Distribution Center)和Kerberos数据库。 2. 配置客户端的Kerberos认证,包括安装必要的软件和配置文件。 3. ...

    java控制台输入cmd命令, ssh远程linux shell命令, 并打印命令输出到控制台

    以上就是使用Java执行本地CMD命令以及通过SSH连接远程Linux服务器执行shell命令的方法。这两个功能的结合,使开发者能够轻松地在不同的操作系统间进行跨平台的系统操作,极大地提高了开发和运维的效率。

    Andrtoid+ssh(向服务器提交数据)

    本文将详细介绍如何在Android应用中使用SSH来向服务器提交数据。 首先,理解SSH的基本概念是至关重要的。SSH是一种网络协议,主要用于加密网络连接,确保数据传输过程中的安全性。它允许用户在不安全的网络环境中...

    java opencv 调用摄像头实现拍照及本地保存 支持上传FTP 路径配置

    本项目聚焦于使用Java和OpenCV库调用摄像头进行拍照,并将拍摄的照片保存到本地,同时支持通过FTP服务上传至远程服务器。下面将详细阐述这个过程中涉及的关键知识点。 1. **Java编程语言**: Java是一种广泛使用的...

    jsch.jar及实现代码 SftpUtil.java java使用sftp实现上传下载文件

    4. **文件上传**:在SFTP通道上,可以获取`ChannelSftp`对象,然后调用它的`put()`方法来上传本地文件到远程服务器。需要指定源文件路径和目标文件路径。 5. **文件下载**:类似地,使用`ChannelSftp.get()`方法...

    java编写的ftpclient,用于向ftp发送、获取文件

    Java编写的FTPClient是用于与FTP(文件传输协议)服务器交互的一个客户端程序,它使得开发者能够在Java应用程序中实现上传和下载文件的功能。FTP是互联网上一个标准的服务,它允许用户在计算机之间传输文件,通常...

    基于SSH的文件管理系统

    1. **文件上传**:用户选择本地文件后,Struts2 Action会调用Spring管理的DAO,利用Hibernate将文件信息存入数据库,并将文件内容保存到服务器的指定目录。 2. **文件下载**:用户请求下载时,系统根据文件ID查询...

    C# ssh key 各种代码和文件说明

    本文将详细介绍C#中使用SSH Key的相关知识点,并结合提供的压缩包文件内容进行说明。 首先,SSH Key主要由一对密钥组成:公钥和私钥。公钥通常部署在远程服务器上,而私钥保留在本地客户端。当客户端连接服务器时,...

    java通过sftp模式实现FTP的文件上传下载删除功能

    在Java编程中,SFTP(Secure File Transfer Protocol)是一种安全的文件传输协议,它基于SSH(Secure Shell)来提供服务,常用于在不同系统间安全地传输文件。本篇文章将详细探讨如何使用Java通过SFTP模式实现FTP的...

    JavaWeb项目SSH框架的文件上传下载

    5. **文件下载**:在用户需要下载文件时,服务器通过读取文件路径或从数据库获取文件信息,然后使用Servlet的`response.getOutputStream()`方法发送文件内容到客户端。 6. **图片显示**:对于图片文件,上传后通常...

Global site tag (gtag.js) - Google Analytics