2011-07-05 1 views
0

で作業していない:接続コードでのJava幹部やランタイムは、私が幹部を使用してのUbuntuにsshをしようとしているが、私は、コードから実行する何らかの理由で、私はエラー ポート22を取得し、SSH

を拒否したI文字列をまとめるためにコンカットを使用しますが、それらをプリントアウトするので適切に組み立てられていることがわかります。コマンドラインにコピー&ペーストすれば、正しくsshします。 私のコードは、しようとします:

p1= Runtime.getRuntime().exec(run1); 
p1.waitfor(); 

run1 = "ssh -o StrictHostKeyChecking=no -v -i key " + "[email protected]"+ DNS + " sudo mke2fs -F -j "+device; 

任意のアイデア?

+0

@をスカップしてみましたか? Runtime.execでコマンドを実行することは、シェルから実行することとまったく同じではありません – woliveirajr

+0

"sudo mk ..."の後に接続して、結果を投稿することもできます – woliveirajr

+0

run1 a StringまたはString []? – woliveirajr

答えて

0

接続が拒否される場合は、SSHDが実行されていないか、ファイアウォール(または類似)によってブロックされています。

+0

同じ行がコマンドラインに直接書き込まれても機能しますが? – icr

+0

「ポート22:接続が拒否されました」は、.execコールが正しいように見えることを意味し、少なくともポート22にsshしようとしていますが、拒否されています。奇妙だが真実。 – ChrisBint

+0

L/Pではなくキーを使用しているように見えます。それはあなたのexec'ingの呼び出しがこのことを意味するかもしれない_かもしれませんが、確かに問題であるかもしれません。 – ChrisBint

1

接続を開始しているので、拒否されるためには、接続しようとしているマシンがあなたにsshアクセスを拒否していることを意味します。

あなたが持っている方法でマシンにログインし、sshサーバが動作していることを確認します。そうであれば、ファイアウォールがポート22をブロックしていないことを確認します。なぜなら、時々sshサーバが動作しているが、ポート遮断ルールのためにファイアウォールがsshサーバへのネットワークアクセスを許可しないからです。コメントで質問後に編集

--- ---

Is there a difference between ssh in the command line and using exec? Because I can 
connect to the server through the command line, which I assume is still using port 22. 
So if I can ssh that way does that mean port 22 is working? 

いくつかの可能性があります。 Javaには、マシンリソースへのプログラムアクセスを拒否するSecurity Managerが付属しています。セキュリティマネージャがハードドライブにアクセスする権限を拒否したり、他のマシンとの接続を確立したりするため、リモートサーバーからダウンロードされたアプレットコードを安全に実行することができます。アプレットサンドボックスでは、元のWebサーバーに接続を戻して(コードとイメージをさらにダウンロードする)ことができます。

しかし、セキュリティの例外がないと、疑惑がセキュリティマネージャから離れてしまいます。メッセージに「接続が拒否されました」という単語が使用されているということは、接続先のSSHサーバーが接続を受け入れないことを示す強力な指標です。

おそらく、コマンドラインで操作すると、sshコマンドが異なる環境または構成を使用している可能性があります。私はコマンドにエイリアスが付いているかどうか、ssh接続がキーペアについて何らかの仮定をしているかどうかを確認します。コマンドとの間に何もないと思われる場合は、あなたのプログラムがsshバージョン2との接続であることを確認します(バージョン1はセキュリティホールのために多くの人が許可していません)。

次に、名前解決の可能性のある違いについても調べてみましょう。コマンド行でホスト名を解決するのは、Javaプログラムからホスト名を解決する場合とは異なる場合があります。これは、Javaプログラムが安全なシェルサーバーを実行していない別のマシンに接続しようとしていることを意味します。

いずれにしても、本当のコーディング上の問題か環境問題かを特定するために、デバッグを少し行う必要があるようです。

+0

コマンドラインでsshとexecを使用するのに違いはありますか?コマンドラインからサーバに接続することができるので、私はまだポート22を使用していると仮定しています。つまり、私がそうすることができれば、ポート22は機能しているのでしょうか? – icr

+0

あなたが尋ねた質問は、返信する言葉が多すぎるため、私は自分の回答を編集しました。上記を読んで、幸運を祈る。 –

関連する問題