1

リモート サーバーにログインし、リモート サーバー上でコマンドを実行できる TCL プログラムを作成する必要があります。また、リモートサーバーから出力を取得する必要があります。

編集:

Kostixさん、返信ありがとうございます。私の要件は、TCL スクリプトがリモート サーバーにログインできる必要があることです。expectメカニズムを介してパスワードを送信することを計画しており、その後、コマンドを送信することを計画しています。私のサンプルコードは次のようになります:

set prompt "(%|>|\#|\\\$) #"

spawn /usr/bin/ssh $username@$server
expect {
    -re "Are you sure you want to continue connecting (yes/no)?" {
        exp_send "yes\r"
        exp_continue
      #continue to match statements within this expect {}
    }
    -nocase "password: " {
       exp_send "$password\r"
       interact
   }

}

これでログインできますが、このコードを拡張してコマンドを送信する方法がわかりません。いくつかの方法を試しましたが、うまくいきませんでした。

4

2 に答える 2

0

これから SSH を使用するので、このタスクを実行するのに Tcl も Expect もまったく必要ないかもしれません。ログイン後にリモート側でスポーンし (これを行わないと、SSH はログインしたユーザーのいわゆる「ログイン シェル」をスポーンします)、標準入力とチャネルで SSH クライアントに渡すものをプログラムする SSH フィードリモートプログラムが標準出力ストリームに書き込んだものを戻します。

SSH 経由でロギングを自動化するには、いくつかの方法があります。

  • 公開鍵を使用した認証: 秘密 (クライアントの) 鍵がパスワードで保護されていない場合、この方法ではスクリプトはまったく必要ありません。使用する鍵を SSH クライアントに伝えるだけです。
  • 「キーボードインタラクティブ」認証(パスワードベース)。これが、ほとんどの人が SSH のすべてだと考えていることです (これは間違っています)。SSH は「実際の端末」からパスワードを取得することを主張しているため、これをスクリプト化するのはやや困難です。Expect を使用するか、単にsshpassプログラムを使用して SSH クライアントへの呼び出しをラップすることで、そう信じ込ませることができます。
  • SSH クライアントとサーバーの両方が、Kerberos ベースまたは GSSAPI ベースの認証をサポートしている場合もあります。これを使用すると、システム (ローカル ユーザーのセッション) から認証資格情報が取得されるため、スクリプトを作成する必要がない場合があります。

したがって、実行する次のステップは、要件を絞り込むことです。

  1. どのような種類の認証をサポートする必要がありますか?
  2. クライアントから送信するコマンドを実行するプログラムはどれですか? それは Unix シェルでしょうか? Tcl シェル? 他の何か?
  3. そのリモート コマンドは、ある程度の双方向性を使用してスクリプト化する必要がありますか (何かを送信し、応答を待って、それに基づいて次に何を送信するかを決定します)、またはバッチ スタイルのスクリプトで問題ありませんか?

これらの質問に答える前に、最初の質問は広すぎてスタックオーバーフロー形式を満たしていないため、ほとんど意味がありません。

于 2013-01-24T12:22:26.367 に答える