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


    主站蜘蛛池模板: 激情综合亚洲色婷婷五月APP| 亚洲人成免费网站| 韩国免费a级作爱片无码| 又大又黄又粗又爽的免费视频| 亚洲AV电影天堂男人的天堂| 亚洲国产成人va在线观看网址| 99视频免费播放| 亚洲精品福利网站| 美女裸身网站免费看免费网站| 亚洲大香伊人蕉在人依线| 国产福利在线免费| 亚洲AV无码国产剧情| 国产伦精品一区二区三区免费迷| 亚洲第一中文字幕| 99re免费在线视频| 亚洲制服丝袜第一页| 日韩在线免费看网站| 亚洲欧洲综合在线| 成年免费大片黄在线观看岛国| 亚洲av色香蕉一区二区三区| 亚洲高清免费视频| 免费在线看黄的网站| 亚洲av极品无码专区在线观看| 成人五级毛片免费播放| 美女裸免费观看网站| 亚洲国产精品特色大片观看完整版| 四虎影视在线影院在线观看免费视频| 亚洲JIZZJIZZ中国少妇中文| aaa毛片免费观看| 亚洲综合激情六月婷婷在线观看| 免费在线看v网址| 特级毛片aaaa免费观看 | 亚洲av无码乱码在线观看野外 | 亚洲人成亚洲精品| 成人毛片免费在线观看| 国产无遮挡色视频免费观看性色| 无码乱人伦一区二区亚洲一| 麻豆精品国产免费观看| 中国一级特黄高清免费的大片中国一级黄色片| 亚洲国产综合专区在线电影 | 久久精品国产亚洲Aⅴ香蕉|