티스토리 뷰

개요

  • SFTPSSH File Transfer Protocol의 약자로 완전한 보안을 유지한채 원격지 간의 파일 전송을 가능하게 해주는 프로토콜이다. (공격자가 중간에 패킷을 가로채도 전송 내용을 확인하는 것이 불가능하다.) SFTPSSH 기반 하에 작동하기 때문에 SSH와 동일한 22번 포트를 이용하여 서버 연결 및 파일 전송이 가능하다. 이번 글에서는 Kotlin 언어에서 SFTP를 이용한 파일 전송 방법을 소개하고자 한다.

라이브러리 종속성 추가

  • 프로젝트 루트의 /build.gradle 파일에 아래 내용을 추가한다.
dependencies {
    compile group: 'com.jcraft', name: 'jsch', version: '0.1.55'
}

SFTP 파일 전송 예

  • 아래는 Jsch 라이브러리를 이용한 SFTP 파일 전송 예이다.
var session: Session ? = null
try {
    session = JSch().getSession("{username}", "{host}")
    session.setConfig(Properties().apply {
        this["StrictHostKeyChecking"] = "no"
    })
    session.setPassword("{password}")
    session.connect()
    val channel = session.openChannel("sftp") as ChannelSftp
    channel.connect()
    // 파일 전송 실행
    // 원본 파일 경로 문자열 또는 InputStream 객체를 전달 가능
    channel.put("{source_file_src}", "{dest_file_src}")
    channel.disconnect()
} catch (ex: FileNotFoundException) {
    // 소스 파일이 존재하지 않을 경우 예외 처리
} catch (ex: UnknownHostException) {
    // 파일을 전송할 원격 호스트가 유효하지 않을 경우 예외 처리
} catch (ex: JSchException) {
    when(ex.message) {
        "Auth fail" - > // username 또는 password가 일치하지 않을 경우 예외 처리
        else - > ex.printStackTrace()
    }
} catch (ex: SftpException) {
    when(ex.message) {
        "Permission denied" - > // 대상 디렉토리 및 파일에 대한 쓰기 권한이 없을 경우 예외 처리
        else - > ex.printStackTrace()
    }
} catch (ex: Exception) {
    ex.printStackTrace()
} finally {
    session ? .disconnect()
}

참고 글

댓글
댓글쓰기 폼