10

Scenerio:sshを介してJavaプログラムからリモートマシンでコマンドを実行したい(開発マシンでOpenSSHを使用しています)。また、「expect」のようにキーを設定するのではなく、パスワードを渡してssh接続を確立したいと思います。
問題:パスワードログインのような「期待」を行おうとすると、ProcessBuilderで作成されたプロセスにパスワードプロンプトが表示されないように見えます。通常の非sshコマンド(例:'ls')を実行すると、ストリームを取得して、それらとうまく対話できます。標準エラーと標準出力を1つのストリームに結合していますredirectErrorStream(true);したがって、標準エラーでそれを見逃していません...「-v」オプションを指定してsshを実行すると、ストリーム内のすべてのログが表示されますが、プロンプトは表示されません。このような目的でProcessBuilderを使用するのはこれが初めてです。Python、Perl、または古き良き期待を使用する方が簡単だと思いますが、上司は既存のJavaプログラム内で取得しようとしているもの(リモートログファイルと実行中のスクリプト)を利用したいので、行き詰まっています。

助けてくれてありがとう!

4

6 に答える 6

10

プロンプトはssh、がTTYに接続されている場合にのみ表示される場合がありますが、Javaの場合は表示されません。

アプリケーションのコマンドラインでパスワードを指定する方法はおそらくありsshます。それがプロンプトを乗り越える方法になります。

または、外部アプリケーションを実行するのではなく、ネイティブJavaコードからホストサーバーに直接接続することを検討してください。これを行うライブラリは100万あります。

于 2009-02-20T17:17:29.267 に答える
7

外部のsshプログラムを使用するのではなく、Javasshライブラリを使用してみませんか。

私がグーグルで見つけた2つは-opensshがstdinにパスワードを入力するのを防ぐために非常に一生懸命働いているという問題を回避する-それはターミナルを直接開くだろう。動作するためには、ttyをシミュレートするために非常に懸命に動作する必要があります。

于 2009-02-20T17:22:22.250 に答える
4

Java sshクライアントを使用してみませんか?これはBSDライセンスであり、ここにはさらに多くのクライアントがリストされています

于 2009-02-20T17:25:01.557 に答える
2

ほとんどのセキュリティ志向のプログラムは、パスワードのキャプチャにstdin / stdoutを使用せず、TTYまたは同等の方法をキャプチャします。

于 2009-02-20T17:18:19.203 に答える
1

Java SSH ライブラリを使用するという他のユーザーの提案を反映しています。しかし、コーエンの反応についてコメントしたかった. 接続を確立するときにコマンドライン経由でパスワードを送信することは安全ではなく、多くの sshd サーバーでは許可されていません (構成に基づく)。

このためのキーの設定を検討して、パスワードなしでマシン間で ssh コマンドを実行できるようにすることをお勧めします。

基本的な手順 - openssh を使用して鍵ペアを作成します (私は RSA を使用しましたが、今はもっと良い方法があることを知っています) - SOURCE マシンのホーム フォルダーに .ssh ディレクトリを作成します - サーバーのホーム フォルダーに .ssh ディレクトリを作成しますターゲット マシン - 秘密鍵をソース マシンの .ssh フォルダに保管します - 公開鍵をターゲットの .ssh フォルダにある authorized_keys というファイルにコピーします

いくつかの指示はここにあります

于 2011-05-06T18:26:06.670 に答える
0

edtFTPj/PROを使用してコマンドを実行したり、SFTP 経由でファイル転送を実行したりできます。ジャバです。

于 2009-06-09T09:52:46.707 に答える