美文网首页PHP程序猿Java学习笔记程序员
JSch-远程调用linux命令和文件上传

JSch-远程调用linux命令和文件上传

作者: 献给记性不好的自己 | 来源:发表于2017-01-04 17:25 被阅读81次

pom.xml配置依赖

        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.53</version>  
        </dependency> 

一、远程调用linux命令

1、如果服务器只是单纯的用户名,密码登录代码如下:

public class RemoteShellUtils {
    private static final Logger LOG = Logger.getLogger(RemoteShellUtils.class);
    private Channel channel = null;
    private Session session = null;
    // 用户名
    private static String user;
    // 密码
    private static String passwd;
    // ip地址
    private static String host;
    // 端口号
    private static int port;

    static {
        InputStream in = ClassLoader
                .getSystemResourceAsStream("store.properties");
        Properties prop = new Properties();
        try {
            prop.load(in);
            user = prop.getProperty("server.user");
            passwd = prop.getProperty("server.passwd");
            host = prop.getProperty("server.host");
            port = Integer.valueOf(prop.getProperty("server.port"));
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    /**
     * 获取session
     * 
     * @param user服务器用户名
     * @param passwd服务器密码
     * @param host服务器ip地址
     * @param port服务器端口号
     * @return
     * @throws JSchException
     */
    public Session getSession() throws JSchException {
        // 创建JSch对象
        JSch jsch = new JSch();
        session = jsch.getSession(user, host, port);
        LOG.info("session创建成功");
        // 设置密码
        session.setPassword(passwd);
        java.util.Properties config = new java.util.Properties();
        config.put("StrictHostKeyChecking", "no");
        session.setConfig(config);
        // 设置timeout时间
        session.setTimeout(timeout);
        // 通过Session建立连接
        session.connect();
        LOG.info("session连接成功");
        return session;
    }

    /**
     * 创建ChannelExec
     * @return
     * @throws JSchException
     */
    private ChannelExec getExecChannel() throws JSchException {
        if (session == null) {
            session = getSession();
        }
        // 打开SFTP通道
        channel = session.openChannel("exec");
        // LOG.info("Connected successfully to " + host + ":" + port);
        return (ChannelExec) channel;
    }
    /**
     * 执行shell命令
     * 
     * @param command
     */

    public boolean execShell(String command) {
        BufferedReader reader = null;
            channel = getExecChannel();
            ((ChannelExec) channel).setCommand(command);
            channel.setInputStream(null);
            channel.connect(); // 建立SFTP通道的连接
            InputStream in = channel.getInputStream();
            reader = new BufferedReader(new InputStreamReader(in));
            String buf = null;

            while ((buf = reader.readLine()) != null) {
                System.out.println(buf);
            }
        }
      /**
      *关闭连接资源
      */
      public void closeChannel() {
        if (channel != null) {
            channel.disconnect();
        }
        if (session != null) {
            session.disconnect();
        }
    }
    }

2、如果服务器是秘钥加密码登录,则创建session方法需要修改

    /**
     * 获取session
     * 
     * @param user
     * @param passwd
     * @param host
     * @param port
     * @return
     * @throws JSchException
     */
    public Session getSession() throws JSchException {
        // 创建JSch对象
        JSch jsch = new JSch();
    // 根据用户名,主机ip,端口号,获取一个Session对象
        //获取秘钥
        String privateKey = ClassLoader.getSystemResource("lie_rsa").getPath()
            .substring(1);
        jsch.addIdentity(privateKey, passwd);
        session = jsch.getSession(user, host, port);
        LOG.info("session创建成功");
        // 设置密码
        //session.setPassword(passwd);
        java.util.Properties config = new java.util.Properties();
        config.put("StrictHostKeyChecking", "no");
        session.setConfig(config);
        // 设置timeout时间
        session.setTimeout(timeout);
        // 通过Session建立连接
        session.connect();
        LOG.info("session连接成功");
        return session;
    }

二、上传文件

    /**
     * 文件上传
     * 
     * @param src本地文件路径
     * @param dst上传到服务器的地址
     */
    public void uploadFile(String src,String dst) {
        ChannelSftp channelSftp = null;
        FileInputStream fileInputStream = null;
        channelSftp = getSFTPChannel();
        fileInputStream = new FileInputStream(src);
        channelSftp.put(fileInputStream,dst,ChannelSftp.OVERWRITE);
    }

相关文章

  • JSch-远程调用linux命令和文件上传

    pom.xml配置依赖 一、远程调用linux命令 1、如果服务器只是单纯的用户名,密码登录代码如下: 2、如果服...

  • scp 上传 下载 文件

    linux: scp 上传 下载 文件 linux 中的ssh命令: scp 可以用来上传本地文件到远程服务器 或...

  • Linux 基础

    了解 Linux 的常用命令 远程登录 上传下载 系统目录 文件和目录操作 Linux 下的权限体系 压缩和打包 ...

  • Linux命令之rz命令与sz命令

    1.rz命令 rz命令(Receive ZMODEM),使用ZMODEM协议,将本地文件批量上传到远程Linux/...

  • Mac本地文件上传到云服务器

    一、put命令 1、put 本地文件路径 远程路径 二、scp命令 1、mac上传文件到Linux服务器scp 文...

  • Python Paramiko模块使用

    1 执行远程命令 2 上传文件到远程 3 从远程下载文件

  • CentOS 安装rz和sz命令

    Windows上远程连接Linux,可以通过rz和sz进行服务器的文件上传下载 工具的安装命令:yum -y in...

  • linux的scp和sftp简单使用

    scp 远程拷贝文件的命令 远程下载文件到本地目录 远程下载目录到本地 上传文件到远程机器指定目录 上传本地目录到...

  • 远程操作云主机

    Paramiko 是用于实现执行远程命令和远程传输文件 公匙密匙俩连接 文件上传下载

  • Linux部署代码

    Linux机器通过SCP上传文件 Linux机器可通过以下命令向Linux云服务器上传文件:scp 本地文件地址 ...

网友评论

    本文标题:JSch-远程调用linux命令和文件上传

    本文链接:https://www.haomeiwen.com/subject/qrtavttx.html