0

この問題について多くのスレッドがあることは知っていますが、正しくはありません。次の例に従います。 Java から Linux シェル コマンドを呼び出してコマンドを実行します。ssh コマンドの問題は認証にあります。実行すると、パスワードを設定する必要があります

$ ssh root@server 'fgrep Exception *.log*' 
Enter passphrase for key '/././.ssh/id_rsa':

ここにパスワードを渡すにはどうすればよいですか?

4

2 に答える 2

1

ssh を呼び出すために利用できるライブラリがあります。Java Secure Channel (JSCH)は、maven、ant、および eclipse で使用される非常に人気のあるライブラリです。BSD スタイル ライセンスのオープン ソースです。

ssh の認証が必要な場合は、java 経由で使用できます。

それでもパスワードの受け渡しをバイパスする必要がある場合は、2 つの方法があります。1 つは保存されたパスワードを含み、もう 1 つは含まないものです。

どちらも非対話型です。つまり、パスワードを入力するためにそこにいないときに機能します。

  1. パスワードを必要としない方法。SSH では、パスワードの代わりに公開鍵/秘密鍵認証を使用できます。ほぼすべての Linux ディストリビューションに付属している OpenSSH を使用していると仮定します。

    手順 :

    • 秘密鍵ログインを受け入れるように SSH サーバーを構成します。/etc/ssh/sshd_config に、PubkeyAuthentication yes という行があることを確認します (その行の前に # がないこと)。このファイルを変更した場合は、sshd サービスを再起動する必要があります。

    • ローカル マシン (サーバーではない) で、 ssh-keygen -t rsaを使用してキーのペアを作成します (rsa 以外のオプションを使用することもできますが、ここでは単純にしています)。パスワードを指定しないでください。プロンプトが表示された場所にキーを保存します。

    • 作成した id_rsa.pub ファイルの内容 (非常に長い 1 行のテキスト) を開き、その内容をサーバー マシンの $HOME/.ssh/authorized_keys ファイルの末尾にコピーします。ファイルが存在しない場合は作成します。

    詳細はこちらを参照してください

  2. 基本的な考え方は、管理自動化ツールである expect を使用して、プロンプトが表示されたら ssh にパスワードを入力することです。常に機能するとは限りません。機能しない場合、その理由を理解するのは困難です。最初の方法をお勧めします。

    とにかく、これはあなたが望むことをするまで突くことができるコマンドです.

スクリプトコードは次のとおりです。

    expect -c 'spawn ssh user@remote.host ; expect assword ; send  "passphrase\n" ; interact'

システムに Expect がインストールされていない可能性があります。必ずインストールしてください

于 2012-06-28T11:00:17.217 に答える
0

実行から InputStream (出力がある) を取得し、パスワードの入力を求めるのを待ってから、(コマンドに入力を与える) OutputStream を取得し、必要なパスワードを送信する必要があります。

この記事を読んでください

于 2012-06-28T10:20:21.380 に答える