티스토리 뷰

SFTP 연결 기본 FTP와의 차별은 있지만 연결은 간단하다.


하기내용은 외국사이트에서 간단히 제공하고 있는 소스 Example 입니다.


public class TestExample {


  static {

    try {

        System.loadLibrary("chilkat");

    } catch (UnsatisfiedLinkError e) {

      System.err.println("Native code library failed to load.\n" + e);

      System.exit(1);

    }

  }


  public static void main(String argv[])

  {

    CkCrypt2 crypt = new CkCrypt2();


    //  Any string argument automatically begins the 30-day trial.

    boolean success = crypt.UnlockComponent("30-day trial");

    if (success != true) {

        System.out.println(crypt.lastErrorText());

        return;

        }


    crypt.put_CryptAlgorithm("aes");


    //  CipherMode may be "ecb" or "cbc"

    crypt.put_CipherMode("cbc");


    //  KeyLength may be 128, 192, 256

    crypt.put_KeyLength(256);


    //  The padding scheme determines the contents of the bytes

    //  that are added to pad the result to a multiple of the

    //  encryption algorithm's block size.  AES has a block

    //  size of 16 bytes, so encrypted output is always

    //  a multiple of 16.

    crypt.put_PaddingScheme(0);


    //  An initialization vector is required if using CBC mode.

    //  ECB mode does not use an IV.

    //  The length of the IV is equal to the algorithm's block size.

    //  It is NOT equal to the length of the key.

    String ivHex = "000102030405060708090A0B0C0D0E0F";

    crypt.SetEncodedIV(ivHex,"hex");


    //  The secret key must equal the size of the key.  For

    //  256-bit encryption, the binary secret key is 32 bytes.

    //  For 128-bit encryption, the binary secret key is 16 bytes.

    String keyHex = "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F";

    crypt.SetEncodedKey(keyHex,"hex");


    //  Encrypt a file, producing the .aes as output.

    //  The input file is unchanged, the output .aes contains the encrypted

    //  contents of the input file.


    //  Note: The .aes output file has no file format.  It is simply a stream

    //  of bytes that resembles random binary data.

    String inFile = "/Users/chilkat/testData/pdf/sample.pdf";

    String outFile = "/Users/chilkat/testData/p7m/sample.pdf.aes";

    success = crypt.CkEncryptFile(inFile,outFile);

    if (success != true) {

        System.out.println(crypt.lastErrorText());

        return;

        }


    //  For demonstration purposes, a different instance of the object will be used

    //  for decryption.

    CkCrypt2 decrypt = new CkCrypt2();


    //  All settings must match to be able to decrypt:

    decrypt.put_CryptAlgorithm("aes");

    decrypt.put_CipherMode("cbc");

    decrypt.put_KeyLength(256);

    decrypt.put_PaddingScheme(0);

    decrypt.SetEncodedIV(ivHex,"hex");

    decrypt.SetEncodedKey(keyHex,"hex");


    //  Decrypt the .aes

    inFile = "/Users/chilkat/testData/p7m/sample.pdf.aes";

    outFile = "/Users/chilkat/testData/pdf/recovered.pdf";

    success = decrypt.CkDecryptFile(inFile,outFile);

    if (success == false) {

        System.out.println(decrypt.lastErrorText());

        return;

        }


    System.out.println("Success!");

  }

}


Session.connect: java.io.IOException: End of IO Stream Read


JSch jsch = new JSch();

session = jsch.getSession(SFTPUSER,SFTPHOST,SFTPPORT);

session.setPassword(SFTPPASS);


java.util.Properties config = new java.util.Properties();


config.put("kex", "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-        group-exchange-sha256");


config.put("StrictHostKeyChecking", "no");

session.setConfig(config);

session.connect(300000);

channel = session.openChannel("sftp");

channel.connect();

문제 해결을 위한 해결방법을 알아보자.

Session session = null;

session = jsch.getSession(SFTPUSER, SFTPHOST);

session.setPassword(SFTPPASS);

session.setPort(SFTPPORT);

session.setConfig("StrictHostKeyChecking", "no");

session.setConfig("cipher.s2c", "aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,aes256-ctr");

session.setConfig("cipher.c2s", "aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,aes256-ctr");

session.connect();


관련 세팅을 전체 다해준다...만약 서버에서 진행되는 Encyption을 정확히 안다고 하면은 해당 내용만 설정값을 지정하면될거 같다.

JSch 세팅을 하면서는 중요한건 몇가지 없다..관련 openChannel만 sftpChannel = (ChannelSftp)session.openChannel("sftp");

진행을 해주면 됩니다.

기본적으로 SFTP를 세팅을 진행을 할때 any로 하는경우는 상관이 없겠지만 특별한 곳에서는 암호화 알고리즘을 체크하는 경우도 종종 아니 반반이다

FTP 프로토콜은 원격 서버의 파일 경로 이름에 대해 유닉스 계열의 이름 지정 체계를 사용합니다. 파일 분리 기호는 "/"이며, 선행 "/"가없는 경로 이름은 현재 디렉토리에 대한 상대 경로로 간주됩니다. 콜론과 백 슬래시는 특별한 의미가 없습니다.



댓글
댓글쓰기 폼
광고위치
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
37,689
Today
182
Yesterday
258
링크
«   2018/05   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
글 보관함