java调用ssh往远程linux上传文件

最近有用到这个但是我的知识储备不够啊,所以在网上查了好多,后来发现这个大神写的帖子,觉得很好分享给大家,也为自己记录一下,省着以后找不到

原文地址: http://blog.csdn.net/qq_34021712/article/details/66972672     ©王赛超

1.导入maven依赖jar包

<!-- https://mvnrepository.com/artifact/com.jcraft/jsch -->
        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.44-1</version>
        </dependency>

2.创建SSH2Util类

package com.ksy.fw.base.util;
 
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
 
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.UserInfo;
 
/**
 * java远程上传文件
 * @author lenovo
 *
 */
public class SSH2Util {
 
    private String host;
 
    private String user;
 
    private String password;
 
    private int port;
 
    private Session session;
 
    /**
     * 创建一个连接
     * 
     * @param host
     *            地址
     * @param user
     *            用户名
     * @param password
     *            密码
     * @param port
     *            ssh2端口
     */
    public SSH2Util(String host, String user, String password, int port) {
        this.host = host;
        this.user = user;
        this.password = password;
        this.port = port;
    }
 
    private void initialSession() throws Exception {
        if (session == null) {
            JSch jsch = new JSch();
            session = jsch.getSession(user, host, port);
            session.setUserInfo(new UserInfo() {
 
                public String getPassphrase() {
                    return null;
                }
 
                public String getPassword() {
                    return null;
                }
 
                public boolean promptPassword(String arg0) {
                    return false;
                }
 
                public boolean promptPassphrase(String arg0) {
                    return false;
                }
 
                public boolean promptYesNo(String arg0) {
                    return true;
                }
 
                public void showMessage(String arg0) {
                }
 
            });
            session.setPassword(password);
            session.connect();
        }
    }
 
    /**
     * 关闭连接
     * 
     * @throws Exception
     */
    public void close() throws Exception {
        if (session != null && session.isConnected()) {
            session.disconnect();
            session = null;
        }
    }
 
    /**
     * 上传文件
     * 
     * @param localPath
     *            本地路径,若为空,表示当前路径
     * @param localFile
     *            本地文件名,若为空或是“*”,表示目前下全部文件
     * @param remotePath
     *            远程路径,若为空,表示当前路径,若服务器上无此目录,则会自动创建
     * @throws Exception
     */
    public void putFile(String localPath, String localFile, String remotePath)
            throws Exception {
        this.initialSession();
        Channel channelSftp = session.openChannel("sftp");
        channelSftp.connect();
        ChannelSftp c = (ChannelSftp) channelSftp;
        String remoteFile = null;
        if (remotePath != null && remotePath.trim().length() > 0) {
            try {
                c.mkdir(remotePath);
            } catch (Exception e) {
            }
            remoteFile = remotePath + "/.";
        } else {
            remoteFile = ".";
        }
        String file = null;
        if (localFile == null || localFile.trim().length() == 0) {
            file = "*";
        } else {
            file = localFile;
        }
        if (localPath != null && localPath.trim().length() > 0) {
            if (localPath.endsWith("/")) {
                file = localPath + file;
            } else {
                file = localPath + "/" + file;
            }
        }
        c.put(file, remoteFile);
 
        channelSftp.disconnect();
    }
 
    // public static void main(String[] args) {
    // Ssh2Util ssh = new Ssh2Util("192.168.1.189", "root", "test" , 22);
    // try {
    // String rs = ssh.runCommand("ddddd");
    // } catch (Exception e) {
    // e.printStackTrace();
    // }
    // }
    // command 命令
    public String runCommand(String command) throws Exception {
        // CommonUtil.printLogging("[" + command + "] begin", host, user);
 
        this.initialSession();
        InputStream in = null;
        InputStream err = null;
        BufferedReader inReader = null;
        BufferedReader errReader = null;
        int time = 0;
        String s = null;
        boolean run = false;
        StringBuffer sb = new StringBuffer();
 
        Channel channel = session.openChannel("exec");
        ((ChannelExec) channel).setCommand(command);
        channel.setInputStream(null);
        ((ChannelExec) channel).setErrStream(null);
        err = ((ChannelExec) channel).getErrStream();
        in = channel.getInputStream();
        channel.connect();
        inReader = new BufferedReader(new InputStreamReader(in, "UTF-8"));
        errReader = new BufferedReader(new InputStreamReader(err, "UTF-8"));
 
        while (true) {
            s = errReader.readLine();
            if (s != null) {
                sb.append("error:" + s).append("\n");
            } else {
                run = true;
                break;
            }
        }
        while (true) {
            s = inReader.readLine();
            if (s != null) {
                sb.append("info:" + s).append("\n");
            } else {
                run = true;
                break;
            }
        }
 
        while (true) {
            if (channel.isClosed() || run) {
                // CommonUtil.printLogging("[" + command + "] finish: " +
                // channel.getExitStatus(), host, user);
                break;
            }
            try {
                Thread.sleep(1000);
            } catch (Exception ee) {
            }
            if (time > 180) {
                // CommonUtil.printLogging("[" + command + "] finish2: " +
                // channel.getExitStatus(), host, user);
                break;
            }
            time++;
        }
 
        inReader.close();
        errReader.close();
        channel.disconnect();
        session.disconnect();
        System.out.println(sb.toString());
        return sb.toString();
    }
 
    public static void main(String[] args) throws Exception {
        SSH2Util ssh2Util = new SSH2Util("127.0.0.1", "root","root", 22);
        ssh2Util.putFile("C:\\Users\\lenovo\\Desktop", "99999.sh","/usr/ksybak/tomcats");
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值