{"id":439,"date":"2015-12-23T14:54:06","date_gmt":"2015-12-23T05:54:06","guid":{"rendered":"http:\/\/esoro.jp\/?p=439"},"modified":"2015-12-24T21:05:56","modified_gmt":"2015-12-24T12:05:56","slug":"%e8%a6%81%e4%bb%b6%e3%81%af%e3%81%a1%e3%82%83%e3%82%93%e3%81%a8%e7%a2%ba%e8%aa%8d%e3%81%97%e3%81%aa%e3%81%84%e3%81%a8%e3%83%bb%e3%83%bb%e3%83%bbvfs%e3%81%a7%e4%bd%9c%e3%82%8a%e7%9b%b4%e3%81%97","status":"publish","type":"post","link":"https:\/\/esoro.jp\/?p=439","title":{"rendered":"\u8981\u4ef6\u306f\u3061\u3083\u3093\u3068\u78ba\u8a8d\u3057\u306a\u3044\u3068\u30fb\u30fb\u30fbVFS\u3067\u4f5c\u308a\u76f4\u3057"},"content":{"rendered":"<p>\u3061\u3087\u3063\u3068\u524d\u306b\u66f8\u3044\u305f\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u6a5f\u80fd\u3067\u3059\u304c\u3001\u5b9f\u6a5f\u3068\u306a\u308bLINUX\u4e0a\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3068\u52d5\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3002\u3002\u30b5\u30fc\u30d0\u3078\u63a5\u7d9a\u306f\u3067\u304d\u3066\u3044\u308b\u3088\u3046\u306a\u306e\u3067\u3059\u304c\u77ac\u6642\u306b\u5207\u65ad\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\u3002\u539f\u56e0\u5207\u308a\u5206\u3051\u306e\u70ba\u3001\u4f5c\u696d\u4e2d\u306b\u4f7f\u3063\u3066\u3044\u308b\u30e6\u30fc\u30b6\u30fcID\u3067\u8a66\u3057\u3066\u307f\u308b\u3068\u7279\u306b\u554f\u984c\u7121\u304f\u52d5\u3044\u3066\u307e\u3059\u3002TeraTerm\u304b\u3089\u6307\u5b9a\u306eID\u3067\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u307f\u308b\u3068\u5373\u5207\u65ad\u3055\u308c\u305f\u3088\u3046\u306b\u306a\u308a\u3001WinSCP\u3067SFTP\u30ed\u30b0\u30a4\u30f3\u3059\u308b\u3068\u554f\u984c\u7121\u304f\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002<br \/>\n\u3000\u3067\u3001\u8981\u4ef6\u3092\u601d\u3044\u51fa\u3059\u3068\u3001\u300cSFTP\u306fOK\u300d\u3067\u306f\u306a\u304f\u3001\u300cSFTP\u306e\u307fOK\u300d\u3067\u3042\u3063\u305f\u4e8b\u306b\u6c17\u304c\u4ed8\u304d\u307e\u3057\u305f\u3002\u4e0e\u3048\u3089\u308c\u305f\u30e6\u30fc\u30b6\u30fcID\u3067\u306f\u3001SSH\u63a5\u7d9a\u304c\u3067\u304d\u306a\u3044\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8a2d\u5b9a\u306b\u306a\u3063\u3066\u3044\u305f\u3068\u3044\u3046\u4e8b\u306a\u3093\u3067\u3059\u3002\uff08sshd_config\u3067SFTP\u5c02\u7528\u306b\u3055\u308c\u3066\u307e\u3057\u305f\uff09<br \/>\n\u3000\u8981\u4ef6\u4e0a\u306f\u305f\u3063\u305f\uff12\u6587\u5b57\u306e\u9055\u3044\u3067\u3059\u304c\u3001\u5b9f\u88c5\u4e0a\u306f\u660e\u3089\u304b\u306b\u5225\u7269\u3067\u3042\u308a\u3001SSH\u3067\u63a5\u7d9a\u3059\u308b\u3088\u3046\u306a\u5b9f\u88c5\u3067\u306fNG\u3068\u3044\u3046\u4e8b\u306b\u306a\u308a\u307e\u3059\u3002<br \/>\n\u3000\u3068\u306a\u308b\u3068Gamyned\u306e\u3088\u3046\u306bSSH\u3092\u524d\u63d0\u306b\u3057\u305f\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u306a\u304f\u3001SFTP\u306e\u307f\u3067\u30b5\u30fc\u30d0\u3078\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u63a2\u3057\u3001ApacheCommons\u306eVFS\u306b\u843d\u3061\u7740\u304d\u307e\u3057\u305f\u3002\u306a\u304a\u3001VSF\u306b\u306fJsch\u304c\u5fc5\u8981\u307f\u305f\u3044\u3067\u3059\u3002<br \/>\n\u3000login,logout\u306f\u306a\u3055\u305d\u3046\u306a\u3093\u3067\u3001ManagedBean\u306e\u547c\u3073\u51fa\u3057\u30e1\u30bd\u30c3\u30c9\u5f15\u6570\u306bID\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3001\u30db\u30b9\u30c8\u540d\u3092\u8ffd\u52a0\u3057\u3066\u3001SFTP\u51e6\u7406\u30af\u30e9\u30b9\u304c\u6b86\u3069\u306e\u5909\u66f4\u7b87\u6240\u3068\u306a\u308a\u307e\u3059\u3002\u3068\u308a\u3042\u3048\u305a\u3001\u30d5\u30a1\u30a4\u30eb\u53d7\u4fe1\u306f\u51fa\u6765\u307e\u3057\u305f\u306e\u3067\u5225\u9014\u6574\u7406\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"lang:xhtml decode:true \" title=\"POM.xml\" >  &lt;dependencies&gt;\r\n\t&lt;dependency&gt;\r\n\t\t&lt;groupId&gt;org.apache.commons&lt;\/groupId&gt;\r\n\t\t&lt;artifactId&gt;commons-vfs2&lt;\/artifactId&gt;\r\n\t\t&lt;version&gt;2.0&lt;\/version&gt;\r\n\t&lt;\/dependency&gt;\r\n\t&lt;dependency&gt;\r\n\t\t&lt;groupId&gt;com.jcraft&lt;\/groupId&gt;\r\n\t\t&lt;artifactId&gt;jsch&lt;\/artifactId&gt;\r\n\t\t&lt;version&gt;0.1.53&lt;\/version&gt;\r\n\t&lt;\/dependency&gt;\r\n\t&lt;dependency&gt;\r\n\t\t&lt;groupId&gt;org.apache.commons&lt;\/groupId&gt;\r\n\t\t&lt;artifactId&gt;commons-lang3&lt;\/artifactId&gt;\r\n\t\t&lt;version&gt;3.4&lt;\/version&gt;\r\n\t&lt;\/dependency&gt;\r\n  &lt;\/dependencies&gt;\r\n<\/pre>\n<pre class=\"lang:java decode:true \" title=\"SFTPFileAccess.java\" >import org.apache.commons.lang3.StringUtils;\r\nimport org.apache.commons.lang3.time.DateFormatUtils;\r\nimport org.apache.commons.vfs2.FileObject;\r\nimport org.apache.commons.vfs2.FileSystemManager;\r\nimport org.apache.commons.vfs2.FileSystemOptions;\r\nimport org.apache.commons.vfs2.FileType;\r\nimport org.apache.commons.vfs2.VFS;\r\nimport org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder;\r\n\r\n\/**\r\n * SFTP\u30d5\u30a1\u30a4\u30eb\u30a2\u30af\u30bb\u30b9\u30af\u30e9\u30b9 by apache commons vfs\r\n * *\/\r\n@Stateless\r\npublic class SFTPFileAccess {\r\n\t\r\n\tpublic SFTPFileAccess(){\r\n\t}\r\n\r\n\t\/**\r\n\t * \u30ea\u30e2\u30fc\u30c8\u30db\u30b9\u30c8\u4e0a\u306e\u6307\u5b9a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u30d5\u30a1\u30a4\u30eb\u4e00\u89a7\u3092\u53d6\u5f97\u3059\u308b\r\n\t * @param String RemoteDir \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u540d\r\n\t * @param List&lt;LogFile&gt; \u30bb\u30c3\u30c8\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u4e00\u89a7\r\n\t * @param String User \u30e6\u30fc\u30b6\u30fcID\r\n\t * @param String Password \u30d1\u30b9\u30ef\u30fc\u30c9\r\n\t * @param String HostName \u30db\u30b9\u30c8\u540d\r\n\t * @throws IOException\r\n\t * *\/\r\n\tpublic void getSFTPList(String RemoteDir, List&lt;LogFile&gt; FileList, String User, String Password, String HostName) throws IOException {\r\n\r\n\t\tFileSystemOptions opts = new FileSystemOptions();\r\n\t\tSftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(opts, \"no\");\r\n\t\tFileSystemManager fsManager = VFS.getManager();\r\n\t\t\r\n    \tString URL = \"sftp:\/\/\"+URLEncoder.encode(User, \"UTF-8\");\r\n    \t\r\n    \tURL = URL +\":\" + URLEncoder.encode(Password, \"UTF-8\");\r\n    \tURL = URL +\"@\" + URLEncoder.encode(HostName, \"UTF-8\");\r\n    \tURL = URL + RemoteDir;\r\n    \t\r\n\t\tFileObject localFileObject=fsManager.resolveFile(URL);\r\n\t\t\r\n\t\t\/\/Directory\u30c1\u30a7\u30c3\u30af\r\n\t\tif ( !localFileObject.getType().equals(FileType.FOLDER) ){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\/\/\u30d5\u30a1\u30a4\u30eb\u5b58\u5728\u30c1\u30a7\u30c3\u30af\r\n\t\tif( ! localFileObject.getType().hasChildren() ){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tFileObject[] children = localFileObject.getChildren();\r\n        for (int i = 0; i &lt; children.length; i++) {\r\n        \tif(StringUtils.isEmpty(children[ i ].getName().getBaseName())){\r\n\t        \tLogFile file = new LogFile();\r\n\t        \tfile.setFileName(children[ i ].getName().getBaseName());\r\n\t        \tfile.setDirectory(RemoteDir);\r\n\t        \tfile.setFileSize(children[ i ].getContent().getSize());\r\n\t        \tDate tm = new Date(children[ i ].getContent().getLastModifiedTime());\r\n\t        \tfile.setUpDateTime(DateFormatUtils.format(tm, \"yyyy\/MM\/dd HH:mm:ss\"));\r\n\t        \tFileList.add(file);\r\n        \t}\r\n        }\r\n    }\r\n    \/**\r\n     * SFTP\u30d5\u30a1\u30a4\u30eb\u53d7\u4fe1\r\n     * @param remoteFile\u3000\u53d7\u4fe1\u5143\u30d5\u30a1\u30a4\u30eb\r\n     * @param stream \u30b9\u30c8\u30ea\u30fc\u30e0\r\n     * @param String User \u30e6\u30fc\u30b6\u30fcID\r\n     * @param String Password \u30d1\u30b9\u30ef\u30fc\u30c9\r\n     * @param String HostName \u30db\u30b9\u30c8\u540d\r\n     * *\/\r\n    public void getFile( String remoteFile, OutputStream stream, String User, String Password, String HostName) throws IOException{\r\n\t\tFileSystemOptions opts = new FileSystemOptions();\r\n\r\n\t\tSftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(opts, \"no\");\r\n\t\tFileSystemManager fsManager = VFS.getManager();\r\n        \r\n\t\tString URL = \"sftp:\/\/\"+URLEncoder.encode(User, \"UTF-8\");\r\n    \tURL = URL +\":\" + URLEncoder.encode(Password, \"UTF-8\");\r\n    \tURL = URL +\"@\" + URLEncoder.encode(HostName, \"UTF-8\");\r\n    \tURL = URL + remoteFile;\r\n    \t\r\n\t\tFileObject localFileObject = fsManager.resolveFile(URL);\r\n\t\t\r\n\t\tif(!localFileObject.exists()){\r\n\t\t\tthrow new IOException(); \r\n\t\t}\r\n\t\t\r\n\t\tInputStream inputStream = localFileObject.getContent().getInputStream();\r\n\r\n\t\tBufferedOutputStream bos = new BufferedOutputStream(stream);\r\n        \r\n        byte[] buffer = new byte[1024];\r\n        int readLength = 0;\r\n        \r\n        while( (readLength = inputStream.read(buffer)) != -1){\r\n          bos.write(buffer, 0, readLength);\r\n        }\r\n        \/\/ close\r\n        inputStream.close();\r\n        bos.close();\r\n    }\r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u3061\u3087\u3063\u3068\u524d\u306b\u66f8\u3044\u305f\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u6a5f\u80fd\u3067\u3059\u304c\u3001\u5b9f\u6a5f\u3068\u306a\u308bLINUX &hellip; <a href=\"https:\/\/esoro.jp\/?p=439\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,6],"tags":[],"_links":{"self":[{"href":"https:\/\/esoro.jp\/index.php?rest_route=\/wp\/v2\/posts\/439"}],"collection":[{"href":"https:\/\/esoro.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esoro.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esoro.jp\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/esoro.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=439"}],"version-history":[{"count":0,"href":"https:\/\/esoro.jp\/index.php?rest_route=\/wp\/v2\/posts\/439\/revisions"}],"wp:attachment":[{"href":"https:\/\/esoro.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=439"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esoro.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=439"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esoro.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=439"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}