java ssh printwriter_JAVA代码实现SSH连接执行Linux命令实现增量发布

突发奇想,想用JAVA代码实现执行Linux脚本,实现 增量文件的上传然后重启Tomcat服务器. 经百度后发现了可行的方式.

1: 需要借助于 ganymed-ssh2-build210.jar jar

2: 默认一次只能执行一个命令(不然会抛出A remote execution has already started.) 要想实现执行多个命令 需要执行多次 或者 写成批文件的形式 再或者 几条命令合并成为一条语句执行package ssh;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.util.ArrayList;

import java.util.Collection;

import java.util.List;

import java.util.Objects;

import java.util.Scanner;

import java.util.Set;

import java.util.concurrent.TimeUnit;

import java.util.logging.Level;

import java.util.logging.Logger;

import java.util.stream.Collectors;

import ch.ethz.ssh2.Connection;

import ch.ethz.ssh2.SCPClient;

import ch.ethz.ssh2.Session;

import ch.ethz.ssh2.StreamGobbler;

public class Scpclient {

// IP

private String ip;

// 端口

private int port;

// 用户名

private String username;

// 密码

private String password;

// 实例

static private Scpclient instance;

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;

}

public void getFile(String remoteFile, String localTargetDirectory) {

Connection conn = null;

try {

conn = new Connection(ip, port);

conn.connect();

boolean isAuthenticated = conn.authenticateWithPassword(username, password);

if (isAuthenticated == false) {

System.err.println("authentication failed");

}

SCPClient client = new SCPClient(conn);

client.get(remoteFile, localTargetDirectory);

conn.close();

} catch (IOException ex) {

Logger.getLogger(SCPClient.class.getName()).log(Level.SEVERE, null, ex);

}finally {

if (conn != null) conn.close();

}

}

public void putFile(String localFile, String remoteTargetDirectory) {

Connection conn = null;

try {

conn = new Connection(ip, port);

conn.connect();

boolean isAuthenticated = conn.authenticateWithPassword(username, password);

if (isAuthenticated == false) {

System.err.println("authentication failed");

}

SCPClient client = new SCPClient(conn);

client.put(localFile, remoteTargetDirectory);

conn.close();

} catch (IOException ex) {

Logger.getLogger(SCPClient.class.getName()).log(Level.SEVERE, null, ex);

}finally {

if (conn != null) conn.close();

}

}

/**

* 上传文件

* @param localFile

* @param remoteFileName

* @param remoteTargetDirectory

* @param mode

* Author:YCM

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值