JSch APIを使用して、リモートの Unix サーバーでシェル スクリプトを実行する Java アプリケーションを作成しようとしています。
パスワードなしでサーバーにログインできるかどうか疑問に思っていました。もしそうなら - どのように?サーバーで認証キーのペアを生成し、アプリケーションにキー ファイルから情報を読み取らせる必要がありますか?
Java アプリケーションは Windows ステーションにあります。
これは確かに実行可能です。jsch で提供されるサンプル ディレクトリを見てください。
UserAuthPubKey.java は公開鍵で認証する方法を示しており、KeyGen.java は公開鍵と秘密鍵を作成する方法を示しています。
キーを整理したら、パスワードではなくキーで接続できるようにするための 1 行があります。
JSch jsch = new JSch();
jsch.addIdentity(".ssh/privateKey.pem");
addIdentity メソッドは、マシン上の秘密鍵ファイルの場所を指す単一の引数を取ります。
jlliagreが言ったように、それは可能です。
アプリケーションの鍵ペアを生成し、公開鍵をサーバーに認識させ (多くの場合、公開鍵を入れる~/.ssh/authorized_keys
のが良い方法です)、両方の鍵をクライアントの JSch オブジェクトにファイルまたは byte[] として渡します。また、PreferredAuthentications オプションを変更して公開鍵認証のみを許可し、パスワードの要求やその他の試行を回避することもできます。
注:アプリケーションを管理していないホストに配信すると、アプリケーションのファイルにアクセスできる人なら誰でも秘密鍵を使用してサーバーにログインできます。
したがって、アカウントが有害なことを実行できないこと、またはクライアント マシン (あなたのアカウントと特権のあるもの) があなた (または既知の友人のみ)の完全な制御下にあることを確認する必要があります。(パスフレーズがプログラムと共に配布されている場合、秘密鍵をパスフレーズで暗号化しても役に立ちません。また、プログラムの jar ファイルに入れても役に立ちません。)