2011-10-05 24 views
6

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

ありがとう!

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

Androidの携帯電話から私の学校のサーバーに読み書きしたいと思っています。

答えて

9

public-key authenticationを有効にするには、JSch.addIdentityのいずれかの方法を使用する必要があります。

これらはOpenSSHキー形式の公開鍵と秘密鍵を使用します。したがって、この形式でPuTTYからエクスポートするようにしてください。 (JSchはPuTTYのネイティブフォーマットを理解していませんが、あなた自身でパースしてIdentityインターフェースを実装するアダプターを書くこともできます)。

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

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

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

これは、アイデンティティを設定した後のボックス。

使用すると、1つの公開鍵を使用して最初のセッションは、パスワード認証を使用してくださいと(トンネリングされた)第二にしたい場合は、あなたがグローバルなものを上書きし、セッションごとの設定を使用することができます。

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

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

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

ProxySSHの例については、JSchの作者、山中敦彦の助けを借りて、私自身です。この情報をWikiページに追加する必要があります。

+0

2番目のSSHはユーザー名を取得しないので、セッションをインスタンス化するときに、そのフィールドにはどうすればよいですか?空の文字列またはnull?すなわち、jsch.getSession(WHAT_GOES_HERE?、hostname、22); – Choobs

+0

私は認証失敗のエラーが発生し続けます。私はid_rsaとid_rsa.pubをローカルに格納しており、OpenSSHキーとしてエクスポートしてaddIdentity(...)で使用するためにPuTTYgenを使用しました。何か不足していますか?最初のサーバーに/.ssh/authorized_keysファイルがあります。これは関連する場合はid_rsa.pubのコピーです。 – Choobs

+0

あなたは*常に* SSHのユーザー名が必要です - これを使わないでサーバーにログインすることはできません。 (結局のところ、送られたコマンドはあるローカルユーザアカウントで実行されなければなりません)。ssh/authorized_keys'ファイル(ログインが許可されている公開鍵を含む)は、ログインしたいユーザのホームディレクトリになければなりません。 –

関連する問題