SFTP 소개
SFTP는 보안 파일 전송 프로토콜 인 보안 파일 전송 프로토콜의 약어입니다. 파일 전송을 위해 안전한 네트워크 암호화 방법을 제공 할 수 있습니다. SFTP는 거의 동일한 구문을 가지며 FTP와 기능합니다. SFTP는 SSH의 일부이며 블로거 서버로 파일을 전송하는 안전한 방법입니다. 실제로 SSH 패키지에는 SFTP (보안 파일 전송 프로토콜)라는 보안 파일 정보 전송 서브 시스템이 이미 포함되어 있습니다. SFTP 자체에는 별도의 데몬이 없습니다. SSHD 데몬 (포트 번호는 기본적으로 22)을 사용하여 해당 연결 및 응답 작업을 완료해야합니다. 따라서 어떤 의미에서 SFTP는 서버 프로그램과 같지만 클라이언트 프로그램과 비슷합니다. SFTP는 또한 암호화를 사용하여 인증 정보 및 전송 된 데이터를 전송하므로 SFTP를 사용하는 것이 매우 안전합니다. 그러나이 전송 방법은 암호화/암호 해독 기술을 사용하기 때문에 전송 효율은 일반 FTP보다 훨씬 낮습니다. 네트워크 보안 요구 사항이 높은 경우 FTP 대신 SFTP를 사용할 수 있습니다.
종속성을 추가하십시오
<pectionency> <groupid> com.jcraft </groupid> <artifactid> jsch </artifactid> <bersion> 0.1.54 </version> </fectionency>
구성 추가
SFTP : IP : 192.168.1.60 포트 : 22 타임 아웃 : 60000 레트리 타임 : 3 관리자 : 사용자 이름 : 관리자 비밀번호 : 2k3xryjbd930.
코드 예제
오전 1시에 여러 사용자 디렉토리로 CSV 파일을 다운로드하여 매일 로컬 TMP 디렉토리로
@ServicePublic Class SftPtask 확장 스레드 {private channelsftp sftp; 개인 세션 세션; @Value ( "$ {sftp.admin.username}") 개인 문자열 사용자 이름; @Value ( "$ {sftp.admin.password}") 개인 문자열 암호; @Value ( "$ {sftp.host}") 개인 문자열 호스트; @Value ( "$ {sftp.port}") 개인 정수 포트; 개인 sftpservice sftpservice; public etlsftptask (sftpservice sftpservice) {this.sftpservice = sftpservice; } / *** sftp 연결 설정* / private void connect () {try {jsch jsch = new jsch (); 세션 = jsch.getSession (사용자 이름, 호스트, 포트); 세션 .setpassword (비밀번호); session.setConfig ( "StricthostKeyChecking", "no"); session.connect (); 채널 채널 = session.openchannel ( "sftp"); channel.connect (); sftp = (channelsftp) 채널; } catch (jschexception e) {e.printstacktrace (); }} / *** sftp 연결을 닫습니다* / public void close () {try {if (sftp! = null) {if (sftp.isconnected ()) sftp.disconnect (); } if (session! = null) {if (session.isconnected ()) session.disconnect (); }} catch (예외 e) {e.printstacktrace (); }} / ** * 파일을 로컬로 다운로드 * @param 소스 소스 파일 * @param target file * @throws sftpexception 예외 * @throws filenotfoundexception 예외 * / private void download (문자열 소스, 문자열 target) sftpexception, filenotfoundException {sftp.get (target (target (target))); }/*** 사용자 데이터 파일 처리** @param 루트 데이터 파일 루트 디렉토리* @param 마지막 시간 마지막 파일을 처리 한 마지막 시간* @return 파일을 처리 한 마지막 시간*/개인 정수 핸들 (String Root, Integer Lasttime) {String Directory = root + "/event/"; 벡터 파일; try {files = sftp.ls (directory + "event _*. csv"); } catch (예외 e) {e.printstacktrace (); 반환 0; } // 파일 이름 문자열 filename; // 임시 파일 문자열 tmpfile; // 파일 업데이트 시간 정수 mtime; // 파일 마지막 업데이트 시간 정수 maxtime = 마지막 시간; // (Object O : files) {try {channelsftp.lsentry f = (channelsftp.lsentry) o; // 파일 업데이트 시간 mtime = f.getAttrs (). getMtime (); if (mtime <= lasttime) 계속; // 파일 이름 filename = f.getFilename (); // 마지막 프로세스 이벤트 MAXTIME = MATH.MAX (MAXTIME, MTIME); // 파일 다운로드 tmpfile = "/tmp/" + filename; 다운로드 (directory + filename, tmpfile); } catch (예외 e) {// todo error log e.printstacktrace (); }} // 파일의 마지막 처리 시간을 반환합니다. } / ** * 실행은 오전 1시에 시작됩니다. 문자열 루트; 마지막으로 정수; 긴 CID; 정수 maxtime = 마지막 시간; // (sftpdto sftpdto : sftpservice.findall ()) {// 사용자 홈 디렉토리 root = sftpdto.getSftProot (); // 마지막 파일 처리 마지막 시간 마지막 시간 = sftpdto.getLastTime (); maxtime = math.max (maxtime, handle (root, lasttime)); // 마지막 처리 시간을 업데이트하면 (! maxtime.equals (Lasttime)) {sftpdto.setLastTime (maxtime); sftpservice.update (sftpdto); }} // release sftp resource cose (); }}요약
위는 SFTP를 사용하여 파일을 정기적으로 다운로드하는 Java의 샘플 코드입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!