2017-03-31 2 views
1

現在、私はWindowsからLinuxホストサーバーに接続するときに、自分の資格情報を.batファイルに入れてマシンに自動的にアクセスします。しかし、接続は自動的に私をターミナルシェルに向けるわけではありませんが、別のユーザー名とパスワードを手動で入力する必要があるセカンダリの対話型ログインプロンプトがあります。SSH用Java API二次ログイン検証

私の質問は、これらをJavaまたはちょうど.batで自動化することは可能ですか?

私の同僚の1人は、 "sendkey"メソッドを使用してVBスクリプトでそれを行うことができました。情報オンライン状態では、 "sendkey"は、キーボードで入力されたかのように、1つ以上のキーストロークをアクティブウィンドウに送ります。 JSCHまたはSSHJのJavaでsendkeyの対応があることは知っていますか?

注:ターミナルに直接接続しているわけではありません。私は、sendkeyのように手動で入力したかのように対話型ログインを自動化することです。

答えて

1

型付き文字をsshセッションに注入するのはかなり簡単です。 sshjが提供するOutputStreamに書き込まれる文字を挿入するだけです。私はあなたがログインしてから、対話型のコンソールログインが必要なものを実行すると仮定します。

次のような単純なスクリプトtest.shを使用して、実行されたプロセスをシミュレートします。入力された行を読み込んで印刷します。私はsshjから変更Exec exampleを使用して、このスクリプトを実行しています

#/bin/bash 
read varname 
echo You typed $varname 

final Session session = ssh.startSession(); 
try { 
    Command cmd = session.exec("/home/username/test.sh"); 
    OutputStream out = cmd.getOutputStream(); 
    out.write("1234567\n".getBytes()); // we type 1234567 
    out.flush(); 
    System.out.println(IOUtils.readFully(cmd.getInputStream()).toString()); 
    cmd.join(5, TimeUnit.SECONDS); 
    System.out.println("\n** exit status: " + cmd.getExitStatus()); 
} finally { 
    session.close(); 
} 

あなたはsshjコードを使用してスクリプトを実行する場合は、その結果に

を取得するあなたは1234567

を入力

inputStream行をあなたは、ユーザ名またはパスワードを要求する行を待つことができ、正しいデータをサーバに送信して、入力をシミュレートします。