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

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

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

    paulwong

    java程序?qū)崿F(xiàn)對sftp服務器的操作

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

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

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

    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();
                //參數(shù)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自帶的例子中,有一個可以根據(jù)密鑰生成公鑰的類,叫做UserAuthPubKey.java, 且?guī)в袌D形界面。有用到的可以自己試試。

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

    Feedback

    # re: java程序?qū)崿F(xiàn)對sftp服務器的操作[未登錄] 2013-02-17 14:13 aaa

    dfd  回復  更多評論   


    主站蜘蛛池模板: 国产大片免费天天看| 中文字幕中韩乱码亚洲大片| 久久国产精品成人免费| 亚洲av无码专区在线电影天堂 | 亚洲三级在线播放| 亚洲精品字幕在线观看| 亚洲AV无码成H人在线观看| 精品久久久久久久久免费影院| 男人的天堂网免费网站| 香蕉免费一级视频在线观看| 免费人成动漫在线播放r18| WWW国产亚洲精品久久麻豆| 亚洲色大情网站www| 欧洲 亚洲 国产图片综合| 亚洲精品自拍视频| 久久亚洲AV成人无码| 久久久久亚洲AV无码麻豆| 亚洲视频在线观看免费| 久久国产亚洲观看| 久久久亚洲欧洲日产国码农村| 亚洲人精品午夜射精日韩| 在线a亚洲v天堂网2019无码| 亚洲精品亚洲人成在线观看下载| 免费人成在线观看网站视频 | 国产精品日本亚洲777| 性色av极品无码专区亚洲| 亚洲AV日韩综合一区| 亚洲av无码专区在线观看亚| 男人的天堂av亚洲一区2区| 亚洲AV无码国产一区二区三区| 亚洲国产乱码最新视频| 亚洲中文字幕久久无码| 亚洲欧美日韩中文字幕一区二区三区| 日韩亚洲国产综合高清| 亚洲国产视频久久| 老子影院午夜伦不卡亚洲| 香蕉视频免费在线| 成av免费大片黄在线观看| 日韩精品在线免费观看| 永久免费在线观看视频| 日韩吃奶摸下AA片免费观看|