2011-02-08 4 views
26

私はJSchをsftp通信に使用しています。今は鍵ベースの認証を容易にしたいのですが、キーはクライアントとサーバーのマシン上でネットワークチームによって一度ロードされ、後のすべての通信はユーザーベースになります。キー。 [email protected]SSHキーベースの通信にJSchを使用できますか?

として

sftp -oPort=10022 [email protected] 

このコマンドは正常に動作ように、私はプログラムでこの機能を実現することができますどのように、SFTPに接続します。

JSchを使用することができない場合は、他のライブラリをお勧めします。私はApache SSHDを見つけた。

答えて

68

可能です。見てくださいJSch.addIdentity(...)

これにより、キーをバイト配列として使用したり、ファイルから読み込んだりすることができます。

import com.jcraft.jsch.Channel; 
import com.jcraft.jsch.ChannelSftp; 
import com.jcraft.jsch.JSch; 
import com.jcraft.jsch.Session; 

public class UserAuthPubKey { 
    public static void main(String[] arg) { 
     try { 
      JSch jsch = new JSch(); 

      String user = "tjill"; 
      String host = "192.18.0.246"; 
      int port = 10022; 
      String privateKey = ".ssh/id_rsa"; 

      jsch.addIdentity(privateKey); 
      System.out.println("identity added "); 

      Session session = jsch.getSession(user, host, port); 
      System.out.println("session created."); 

      // disabling StrictHostKeyChecking may help to make connection but makes it insecure 
      // see http://stackoverflow.com/questions/30178936/jsch-sftp-security-with-session-setconfigstricthostkeychecking-no 
      // 
      // java.util.Properties config = new java.util.Properties(); 
      // config.put("StrictHostKeyChecking", "no"); 
      // session.setConfig(config); 

      session.connect(); 
      System.out.println("session connected....."); 

      Channel channel = session.openChannel("sftp"); 
      channel.setInputStream(System.in); 
      channel.setOutputStream(System.out); 
      channel.connect(); 
      System.out.println("shell channel connected...."); 

      ChannelSftp c = (ChannelSftp) channel; 

      String fileName = "test.txt"; 
      c.put(fileName, "./in/"); 
      c.exit(); 
      System.out.println("done"); 

     } catch (Exception e) { 
      System.err.println(e); 
     } 
    } 
} 
+0

実際に私はキーを持っていません。ネットワークチームによってシステムにプリロードされています。これで、キーまたはパスワードなしのコマンドを使用してサーバーに接続できます。 –

+1

*システムにプリロードされている*は、 '.ssh/id_rsa'またはそれに類するものであるか、あなたのホスト用の' .ssh/config'に特別な設定があるか、 'ssh_agent'のようなプログラムを使用していることを意味しますキーを要求に応じて提供する。どのような場合はあなたのために探検し、あなたの質問に追加します。 –

+0

それは本当に私を助けた親愛なる。ガイドラインのおかげで。 –

関連する問題