web-dev-qa-db-ja.com

SSHキーベースの通信にJSchを使用できますか?

私は JSch をsftp通信に使用していますが、キーベース認証を容易に使用したいですキーをロードしました。

sftp -oPort=10022 [email protected]

[email protected]

このコマンドのようにうまく動作し、sftpに接続します。この機能をプログラムで達成する方法。

jSchを使用できない場合は、他のライブラリを提案してください。 Apache SSHD に出会いました。

38
Ahmad Nadeem

可能です。 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);
        }
    }
}
87
Arnost Valicek