jsch實現遠程文件管理示例的簡單介紹

本文目錄一覽:

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異常,

這個正常,應該是你當前上傳用戶在上傳位置沒有權限造成的,權限應該在服務器端修改

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/160972.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-21 01:16
下一篇 2024-11-21 01:16

相關推薦

  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 北化教務管理系統介紹及開發代碼示例

    本文將從多個方面對北化教務管理系統進行介紹及開發代碼示例,幫助開發者更好地理解和應用該系統。 一、項目介紹 北化教務管理系統是一款針對高校學生和教職工的綜合信息管理系統。系統實現的…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的“畫筆”在窗口中繪製…

    編程 2025-04-29
  • Python調字號: 用法介紹字號調整方法及示例代碼

    在Python中,調整字號是很常見的需求,因為它能夠使輸出內容更加直觀、美觀,並且有利於閱讀。本文將從多個方面詳解Python調字號的方法。 一、內置函數實現字號調整 Python…

    編程 2025-04-29
  • 選擇大容量免費雲盤的優缺點及實現代碼示例

    雲盤是現代人必備的工具之一,雲盤的容量大小是選擇雲盤的重要因素之一。本文將從多個方面詳細闡述使用大容量免費雲盤的優缺點,並提供相應的實現代碼示例。 一、存儲空間需求分析 不同的人使…

    編程 2025-04-29
  • Python櫻花樹代碼簡單

    本文將對Python櫻花樹代碼進行詳細的闡述和講解,幫助讀者更好地理解該代碼的實現方法。 一、簡介 櫻花樹是一種圖形效果,它的實現方法比較簡單。Python中可以通過turtle這…

    編程 2025-04-28
  • Corsregistry.a的及代碼示例

    本篇文章將從多個方面詳細闡述corsregistry.a,同時提供相應代碼示例。 一、什麼是corsregistry.a? corsregistry.a是Docker Regist…

    編程 2025-04-28
  • Python Flask系列完整示例

    Flask是一個Python Web框架,在Python社區中非常流行。在本文中,我們將深入探討一些常見的Flask功能和技巧,包括路由、模板、表單、數據庫和部署。 一、路由 Fl…

    編程 2025-04-28
  • Python大神作品:讓編程變得更加簡單

    Python作為一種高級的解釋性編程語言,一直被廣泛地運用於各個領域,從Web開發、遊戲開發到人工智能,Python都扮演着重要的角色。Python的代碼簡潔明了,易於閱讀和維護,…

    編程 2025-04-28

發表回復

登錄後才能評論