<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  回復  更多評論   


    主站蜘蛛池模板: 亚洲天堂2017无码中文| 精品97国产免费人成视频| 亚洲av无码一区二区三区网站 | 久久精品国产亚洲AV麻豆不卡| 四虎影在线永久免费四虎地址8848aa| 无码专区AAAAAA免费视频| 暖暖免费中文在线日本| 亚洲中文字幕一二三四区苍井空| 内射干少妇亚洲69XXX| 亚洲人成人网站色www| 日本亚洲国产一区二区三区| 亚洲片一区二区三区| 亚洲精品国产高清嫩草影院| 大地资源免费更新在线播放| 好紧我太爽了视频免费国产| h视频免费高清在线观看| 大片免费观看92在线视频线视频| 国产成人不卡亚洲精品91| 亚洲AV无码国产一区二区三区 | 国产亚洲人成网站在线观看不卡 | 亚洲电影免费在线观看| 亚洲AV日韩AV鸥美在线观看| 亚洲成AV人在线播放无码| 亚洲国产高清人在线| 亚洲日本香蕉视频观看视频| 久久亚洲精品国产精品婷婷| 亚洲人成网站999久久久综合| 亚洲人成影院77777| 亚洲精品成a人在线观看☆ | 久久国产成人亚洲精品影院 | 日韩高清免费观看| 国产亚洲福利一区二区免费看| 国产hs免费高清在线观看| 国产亚洲精品拍拍拍拍拍| 国产亚洲老熟女视频| 亚洲电影免费在线观看| 亚洲精品无播放器在线播放| 一个人看的hd免费视频| 亚洲成人免费网址| 亚洲精品综合久久| 亚洲精品欧洲精品|