6

別のsshサーバーの背後からサーバーにsshで接続したい。ゲートウェイサーバーにはユーザー名/パスワードが必要ですが、これを行うことができます。次のサーバーにアクセスするためにトンネルを使用していますが、これにはsshキーのみが必要です。PuTTYを使用してキーを生成したため、ユーザー名にキーが存在しますが、Javaプログラムでキーを取得する方法がわかりません。構成ですか?つまり、setConfig( "userauth.publickey"、 "com.jcraft.jsch.UserAuthPublicKey")では、これまたは他の何かをどのように使用しますか?ドキュメントがまばらなようです。助けていただければ幸いです。このセッションに接続すると、「Authfail」というエラーが表示されます。

ありがとう!

私が使用するトンネル方式は次のとおりです。http://sourceforge.net/apps/mediawiki/jsch/index.php?title = ProxySSHだから、それを書いた人に感謝します!

コンテキストとして、Androidフォンから学校のサーバーに対して読み取り/書き込みを行いたいと思います。

4

1 に答える 1

10

公開鍵認証を有効にするには、いずれかの方法を使用する必要がありJSch.addIdentityます。

これらは OpenSSH 鍵形式の公開鍵と秘密鍵を取得します。そのため、必ずこの形式で PuTTY からエクスポートしてください。(JSch は PuTTY のネイティブ形式を理解していませんが、Identity インターフェースを実装するアダプターを作成して自分で解析することはできます)。

JSch に追加された ID は、セッションごとではなくグローバルです。JSch は、JSch 自体とサーバーの両方でサポートされているすべての認証方法を順番に試行し、公開鍵認証は通常、パスワード認証の前に行われるため、これは通常は問題になりません。

すべての認証方法には、ユーザー名 (通常はログインするアカウントの名前) が必要です。

公開鍵認証では、公開鍵は何らかの方法で以前にサーバーで利用可能である必要があります。OpenSSH の sshd の場合、公開鍵は にリストされている必要があります~/.ssh/authorized_keys。(公開鍵が 1 つしかない場合は、それをこのファイルにコピーするだけです。複数の公開鍵がある場合 (それぞれが許可されます)、それぞれを 1 行にする必要があります。)

そのため、ID を設定した後、すぐに使用できるはずです。

最初のセッションがパスワード認証を使用し、2 番目の (トンネル化された) セッションが公開鍵を使用することを確認したい場合は、グローバルなものをオーバーライドして、セッションごとの構成を使用できます。

tunnelSession.setConfig("PreferredAuthentications", "password");

innerSession.setConfig("PreferredAuthentications", "publickey");

(これらはカンマ区切りのリストで、ここではそれぞれ 1 つの要素です。)

ProxySSH の例については、私が作成しました (JSch の著者である Atsuhiko Yamanaka の助けを借りて)。この情報を Wiki ページに追加する必要があります。

于 2011-10-06T11:53:23.517 に答える