2017-03-14 8 views
0

ssh-keygen을 사용하여 생성 된 RSA 공개 키입니다.공개 키가있는 sftp가 작동하지 않습니다.

SFTP를 통해 원격 서버에 연결하는 데 사용하려고 :

JSch jsch = new JSch(); 
     try { 

      String publicKey = "/home/testuser/.ssh/id_rsa.pub"; 
      jsch.addIdentity(publicKey); 
      session = jsch.getSession(sftpUsername, sftpHostname, sftpPort); 
      session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password"); 
     } catch (JSchException e) { 
      logger.error("Unable to obtain session", e); 
     } 

오류 아래 점점 :

com.jcraft.jsch.JSchException: invalid privatekey: /home/testuser/.ssh/id_rsa.pub 
     at com.jcraft.jsch.IdentityFile.<init>(IdentityFile.java:261) 
     at com.jcraft.jsch.IdentityFile.newInstance(IdentityFile.java:135) 
     at com.jcraft.jsch.IdentityFile.newInstance(IdentityFile.java:130) 
     at com.jcraft.jsch.JSch.addIdentity(JSch.java:206) 
     at com.jcraft.jsch.JSch.addIdentity(JSch.java:192) 

어떤 제안?

답변

2

당신은이 :

jsch.addIdentity(publicKey); 

JSch의 javadoc는 말한다 :

public void addIdentity(String prvkey) throws JSchException;

는 공개 키 인증에 사용되는 ID를 추가합니다. identityRepository에 등록하기 전에 암호문으로 암호 해독됩니다.

매개 변수 :

  • prvkey - 개인 키 파일의 파일 이름을 입력합니다. 이것은 또한 키의 식별 이름으로 사용됩니다. 해당 공개 키는 접미어 .pub와 동일한 이름을 가진 파일에 있다고 가정합니다.

JSch가 개인 키를 원할 때 공개 키를 제공했습니다.

생각해 보면 이해할 수 있습니다. 공개 키에 대해서는 비밀이 없습니다. JSch는 비밀을 원하므로 자신이 누구인지 증명할 수 있습니다.

개인 키가 ~/.ssh/id_rsa (.pub 확장자 없음) 일 가능성이 큽니다.

개인 키를 암호 해독하기 위해 암호문을 제공하려면 addIdentity의 두 매개 변수 버전을 사용해야 할 수도 있습니다.