<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    java程序實現對sftp服務器的操作

    FTP服務器中,如果使用的是FTP協議,則用戶名和密碼是以明文方式傳輸的,如果是以SFTP 的方式,就會通過加密的方式傳輸。

    如果服務器中的用戶增加了公鑰的設置,則要求客戶端要有相對應的私鑰。

    公/私鑰的產生方法可見:http://www.jcraft.com/jsch/examples/KeyGen.java.html,值得注意的是,可以產生用密碼的公私鑰和無密碼的公私鑰。

    SFTP服務器:http://www.xlightftpd.com/cn/tutorial/SSH2_SFTP_Setup.html,下載后,添加虛擬服務器,添加用戶,并為用戶添加公鑰文件,即可。

    JAVA模擬一個SFTP服務器:http://mina.apache.org/sshd-project/embedding_ssh.html
    http://svn.apache.org/repos/asf/mina/sshd/trunk/
    public void setupSftpServer(){
        SshServer sshd = SshServer.setUpDefaultServer();
        sshd.setPort(22);
        sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider("hostkey.ser"));

        List<NamedFactory<UserAuth>> userAuthFactories = new ArrayList<NamedFactory<UserAuth>>();
        userAuthFactories.add(new UserAuthNone.Factory());
        sshd.setUserAuthFactories(userAuthFactories);

        sshd.setCommandFactory(new ScpCommandFactory());

        List<NamedFactory<Command>> namedFactoryList = new ArrayList<NamedFactory<Command>>();
        namedFactoryList.add(new SftpSubsystem.Factory());
        sshd.setSubsystemFactories(namedFactoryList);

        try {
            sshd.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    在這里介紹對sftp操作的一種java框架:JSch-Java Secure Channel,官方地址是:http://www.jcraft.com/jsch/

    具體使用方法請看下面代碼:

    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 {
                sftp.cd(directory);
                File file = new File(uploadFile);
                sftp.put(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 {
                sftp.cd(directory);
                sftp.get(downloadFile,saveFile);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        /**
         * 刪除文件
         * 
         * 
    @param directory
         *            要刪除文件所在目錄
         * 
    @param deleteFile
         *            要刪除的文件
         * 
    @param sftp
         
    */
        public void delete(String directory, String deleteFile, ChannelSftp sftp) {
            try {
                sftp.cd(directory);
                sftp.rm(deleteFile);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        public void disconnected(ChannelSftp sftp){
            if (sftp != null) {
                try {
                    sftp.getSession().disconnect();
                } catch (JSchException e) {
                    e.printStackTrace();
                }
                sftp.disconnect();
            }
        }
    }

    在jsch自帶的例子中,有一個可以根據密鑰生成公鑰的類,叫做UserAuthPubKey.java, 且帶有圖形界面。有用到的可以自己試試。

    posted on 2012-12-15 19:54 paulwong 閱讀(10005) 評論(1)  編輯  收藏 所屬分類: J2SE

    Feedback

    # re: java程序實現對sftp服務器的操作[未登錄] 2013-02-17 14:13 aaa

    dfd  回復  更多評論   


    主站蜘蛛池模板: 色婷婷亚洲十月十月色天| 午夜免费不卡毛片完整版| 鲁丝片一区二区三区免费| 中文字幕久无码免费久久| yy一级毛片免费视频| 国产免费黄色无码视频| 亚洲第一视频在线观看免费| 国产成人亚洲精品91专区高清| 色窝窝亚洲AV网在线观看| 自拍偷自拍亚洲精品偷一| 国产精品亚洲精品日韩动图 | 人妻视频一区二区三区免费| av无码久久久久不卡免费网站| 国产在线jyzzjyzz免费麻豆 | 久久亚洲欧美国产精品| 精品无码专区亚洲| 男人免费视频一区二区在线观看| 男性gay黄免费网站| 一级毛片正片免费视频手机看| 黄色视频在线免费观看| 中文字幕乱码免费看电影| 免费无码又爽又刺激高潮视频| 亚洲视频在线免费播放| 猫咪社区免费资源在线观看| 四虎成人免费网站在线| 亚洲成人一区二区| 亚洲熟妇av一区二区三区漫画| 亚洲A∨无码无在线观看| 亚洲性色高清完整版在线观看| 亚洲一区精彩视频| 美女一级毛片免费观看| 东北美女野外bbwbbw免费| 95免费观看体验区视频| 免费激情视频网站| 在线日韩日本国产亚洲| 亚洲视频.com| 亚洲熟妇自偷自拍另欧美| 有码人妻在线免费看片| 一级毛片免费播放| 精品国产免费观看久久久| 久久久久亚洲AV成人网人人软件|