-
ganymed-ssh2-build210.jar java远程访问linux服务器操作、上传下载文件
资源介绍
java远程访问linux服务器操作
远程执行shll脚本或者命令、上传下载文件
package com.szkingdom.kfit.bank.ccbDirectShortcut.helper;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.SCPClient;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
import common.Logger;
import org.apache.commons.lang.StringUtils;
import java.io.*;
import java.util.logging.Level;
/**
* SCP远程访问Linux服务器读取文件
* User: boyer
* Date: 17-12-7
* Time: 下午3:22
* To change this template use File | Settings | File Templates.
*/
public class ScpClient {
//字符编码默认是utf-8
private static String DEFAULTCHART="UTF-8";
protected static org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(ScpClient.class);
static private ScpClient instance;
private Connection conn;
static synchronized public ScpClient getInstance(String IP, int port,
String username, String passward) {
if (instance == null) {
instance = new ScpClient(IP, port, username, passward);
}
return instance;
}
public ScpClient(String IP, int port, String username, String passward) {
this.ip = IP;
this.port = port;
this.username = username;
this.password = passward;
}
private String ip;
private int port;
private String username;
private String password;
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;
}
/**
* 远程登录linux的主机
* @author Ickes
* @since V0.1
* @return
* 登录成功返回true,否则返回false
*/
public Boolean login(){
boolean flg=false;
try {
conn = new Connection(ip);
conn.connect();//连接
flg=conn.authenticateWithPassword(username, password);//认证
} catch (IOException e) {
e.printStackTrace();
}
return flg;
}
/**
* 下载文件
* @param remoteFile 远程文件地址
* @param localTargetDirectory 本地目录地址
*/
public void getFile(String remoteFile, String localTargetDirectory) {
try {
if(login()){
SCPClient client = new SCPClient(conn);
client.get(remoteFile, localTargetDirectory);
conn.close();
}
} catch (IOException ex) {
log.error(ex);
}
}
/**
* 上传文件
* @param localFile 本地目录地址
* @param remoteTargetDirectory 远程目录地址
*/
public void putFile(String localFile, String remoteTargetDirectory) {
try {
if(login()){
SCPClient client = new SCPClient(conn);
client.put(localFile, remoteTargetDirectory);
conn.close();
}
} catch (IOException ex) {
log.error(ex);
}
}
/**
* 上传文件
* @param localFile 本地目录地址
* @param remoteFileName 重命名
* @param remoteTargetDirectory 远程目录地址
* @param mode 默认0600权限 rw 读写
*/
public void putFile(String localFile, String remoteFileName,String remoteTargetDirectory,String mode) {
try {
if(login()){
SCPClient client = new SCPClient(conn);
if((mode == null) || (mode.length() == 0)){
mode = "0600";
}
client.put(localFile, remoteFileName, remoteTargetDirectory, mode);
//重命名
ch.ethz.ssh2.Session sess = conn.openSession();
String tmpPathName = remoteTargetDirectory +File.separator+ remoteFileName;
String newPathName = tmpPathName.substring(0, tmpPathName.lastIndexOf("."));
sess.execCommand("mv " + remoteFileName + " " + newPathName);//重命名回来
conn.close();
}
} catch (IOException ex) {
log.error(ex);
}
}
public static byte[] getBytes(String filePath) {
byte[] buffer = null;
try {
File file = new File(filePath);
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream byteArray = new ByteArrayOutputStream(1024*1024);
byte[] b = new byte[1024*1024];
int i;
while ((i = fis.read(b)) != -1) {
byteArray.write(b, 0, i);
}
fis.close();
byteArray.close();
buffer = byteArray.toByteArray();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return buffer;
}
/**
* @author Ickes
* 远程执行shll脚本或者命令
* @param cmd
* 即将执行的命令
* @return
* 命令执行完后返回的结果值
* @since V0.1
*/
public String execute(String cmd){
String result="";
try {
if(login()){
Session session= conn.openSession();//打开一个会话
session.execCommand(cmd);//执行命令
result=processStdout(session.getStdout(),DEFAULTCHART);
//如果为得到标准输出为空,说明脚本执行出错了
if(StringUtils.isBlank(result)){
result=processStdout(session.getStderr(),DEFAULTCHART);
}
conn.close();
session.close();
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* @author Ickes
* 远程执行shll脚本或者命令
* @param cmd
* 即将执行的命令
* @return
* 命令执行成功后返回的结果值,如果命令执行失败,返回空字符串,不是null
* @since V0.1
*/
public String executeSuccess(String cmd){
String result="";
try {
if(login()){
Session session= conn.openSession();//打开一个会话
session.execCommand(cmd);//执行命令
result=processStdout(session.getStdout(),DEFAULTCHART);
conn.close();
session.close();
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* 解析脚本执行返回的结果集
* @author Ickes
* @param in 输入流对象
* @param charset 编码
* @since V0.1
* @return
* 以纯文本的格式返回
*/
private String processStdout(InputStream in, String charset){
InputStream stdout = new StreamGobbler(in);
StringBuffer buffer = new StringBuffer();;
try {
BufferedReader br = new BufferedReader(new InputStreamReader(stdout,charset));
String line=null;
while((line=br.readLine()) != null){
buffer.append(line+"\n");
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return buffer.toString();
}
}
- 上一篇: Linux_SSH_命令大全完整珍藏版
- 下一篇:没有了