jsch实现远程文件管理示例的简单介绍

发布时间:2023-12-08

jsch实现远程文件管理示例的简单介绍

更新:

本文目录一览:

  • 1、java如何执行远程服务器上的.sh文件
  • 2、JAVA_JSCH如何远程操作SFTP服务器上的文件?
  • 3、如何用Java实现SSH远程连接?
  • 4、Apache SSHD实现SFTP服务端,客户端访问进行远程文件上传下载
  • 5、jsch实现java sftp上传,在非root用户下出现permission dined异常,

java如何执行远程服务器上的.sh文件

你可以使用JSch

JSch全称是“Java Secure Channel”

是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等。同时也是支持执行命令;

以下是大概运行的代码,只是提供大致思路,可以去查官方API和demo

import com.jcraft.jsch.ChannelExec;

import com.jcraft.jsch.ChannelSftp;

import com.jcraft.jsch.ChannelS;

import com.jcraft.jsch.JSch;

import com.jcraft.jsch.JSchException;

import com.jcraft.jsch.Session;

import com.jcraft.jsch.SftpATTRS;

import com.jcraft.jsch.SftpException;

.......

try{

Session session = new JSch().getSession(user, ip, port);

session.setPassword(pwd);

session.setConfig("StrictHostKeyChecking", "no");

session.setConfig("userauth.gssapi-with-mic", "no");

session.connect();

ChannelExec exec = (ChannelExec) session.openChannel("exec");

exec.setCommand("ifconfig");//这里是你要执行的命令,部分命令不支持,具体自己执行下

ByteArrayOutputStream bao = new ByteArrayOutputStream();

exec.setOutputStream(bao);

ByteArrayOutputStream baerr = new ByteArrayOutputStream();

exec.setErrStream(baerr);

exec.connect();

while (!exec.isEOF())

;

String errmsg = new String(baerr.toByteArray(), "utf-8");

if (StringUtils.notNull(errmsg)) {

throw new RuntimeException(errmsg);

} else {

System.out.println(new String(bao.toByteArray(), "utf-8"));

}

}catch(Exception e){

    e.printStackTrace();

}finally{

    //关闭session等操作

}

JAVA_JSCH如何远程操作SFTP服务器上的文件?

使用SSH协议进行FTP传输的协议叫SFTP

换言之你的SSH协议一定启用了,那么使用基本linux命令在远端执行即可。

我个人而言,JSCH一般是这样用的:SFTP用于单纯的文件上传,之后直接使用基础ssh协议执行远端linux命令(比如说,移动文件或是重启服务器等等)

至于API的具体使用方式,稍微搜索一下很容易找到,比如这个:

如何用Java实现SSH远程连接?

这还要思路。。。

表单提交到后台,触发方法, 然后调jsch的方法,获取返回信息。 然后return到页面。

搞定!

Apache SSHD实现SFTP服务端,客户端访问进行远程文件上传下载

package jsch;

import java.io.File;

import java.io.FileInputStream;

import java.util.Properties;

import com.jcraft.jsch.Channel;

import com.jcraft.jsch.ChannelSftp;

import com.jcraft.jsch.JSch;

import com.jcraft.jsch.JSchException;

import com.jcraft.jsch.Session;

public class Test {

    protected String host;//sftp服务器ip

    protected String username;//用户名

    protected String password;//密码

    protected String privateKey;//密钥文件路径

    protected String passphrase;//密钥口令

    protected int port = 22;//默认的sftp端口号是22

    /**

     * 获取连接

     * @return channel

     */

    public ChannelSftp connectSFTP() {

        JSch jsch = new JSch();

        Channel channel = null;

        try {

            if (privateKey != null  !"".equals(privateKey)) {

                //使用密钥验证方式,密钥可以使有口令的密钥,也可以是没有口令的密钥

                if (passphrase != null  "".equals(passphrase)) {

                    jsch.addIdentity(privateKey, passphrase);

                } else {

                    jsch.addIdentity(privateKey);

                }

            }

            Session session = jsch.getSession(username, host, port);

            if (password != null  !"".equals(password)) {

                session.setPassword(password);

            }

            Properties sshConfig = new Properties();

            sshConfig.put("StrictHostKeyChecking", "no");// do not verify host key

            session.setConfig(sshConfig);

            // session.setTimeout(timeout);

            session.setServerAliveInterval(92000);

            session.connect();

            //参数sftp指明要打开的连接是sftp连接

            channel = session.openChannel("sftp");

            channel.connect();

        } catch (JSchException e) {

            e.printStackTrace();

        }

        return (ChannelSftp) channel;

    }

    

    /**

     * 上传文件

     * 

     * @param directory

     *            上传的目录

     * @param uploadFile

     *            要上传的文件

     * @param sftp

     */

    public void upload(String directory, String uploadFile, ChannelSftp sftp) {

        try {

            s;

            File file = new File(uploadFile);

            s(new FileInputStream(file), file.getName());

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

    /**

     * 下载文件

     * 

     * @param directory

     *            下载目录

     * @param downloadFile

     *            下载的文件

     * @param saveFile

     *            存在本地的路径

     * @param sftp

     */

    public void download(String directory, String downloadFile,

            String saveFile, ChannelSftp sftp) {

        try {

            s;

            s;

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

    /**

     * 删除文件

     * 

     * @param directory

     *            要删除文件所在目录

     * @param deleteFile

     *            要删除的文件

     * @param sftp

     */

    public void delete(String directory, String deleteFile, ChannelSftp sftp) {

        try {

            s;

            s;

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

    

    public void disconnected(ChannelSftp sftp){

        if (sftp != null) {

            try {

                s;

            } catch (JSchException e) {

                e.printStackTrace();

            }

            s;

        }

    }

}

jsch实现java sftp上传,在非root用户下出现permission dined异常,

这个正常,应该是你当前上传用户在上传位置没有权限造成的,权限应该在服务器端修改