6

パテで接続タイプ「SSH」を使用して、Windowsから8つの異なるUNIXサーバーに接続します。各サーバーで同じユーザー名/パスワードを使用しています。

現在、パスワードを変更する必要がある場合 (60 日ごと)、パテを開き、接続するセッションを選択し、現在のパスワードを入力し (開いたパテ ウィンドウで)、「passwd」と入力し、現在のパスワードを入力する必要があります。をクリックし、新しいパスワードを入力します。

次に、終了してプロセスを 7 回繰り返します。

これを、古いパスワードと新しいパスワードを使用してスクリプト/バッチ プロセスに提供するだけでよい自動プロセスに変換するにはどうすればよいですか?

4

3 に答える 3

2

プロセスを自動化する方法は次のとおりです。

  1. ActiveTCL Community Editionをダウンロードしてインストールします (64 ビット Windows を使用している場合でも、32 ビット バージョンをダウンロードしてください。64 ビット バージョンには、自動化されたスクリプトを実行するために必要な「Expect」がないためです)。

  2. インストールによって作成された tclsh85 実行可能ファイルを開きます

  3. このコマンド「teacup install Expect」を実行します (注、これは大文字と小文字が区別されます。エラーが発生したり、vpn 上またはプロキシを使用している場合は、特別な http 設定をセットアップする必要がある場合があります)。

  4. Putty の「plink.exe」をダウンロードし、ActiveTCL の bin ディレクトリ (デフォルトのインストール ディレクトリは「C:\Tcl\bin」) に配置するか、「Path」環境変数を変更して、この実行可能ファイルへのパスを含めます (ダウンロードした場所はどこでも)。 plink.exe)。これは、スクリプトが使用するパテのコマンドライン バージョンです。

  5. ドライブの任意の場所に、サーバーのリスト (1 行に 1 つ) を含む "servers.txt" という名前のテキスト ファイルを作成します。スクリプトは同じパスワード (指定したもの) を使用してそれらすべてにログインし、パスワードを指定したものに変更するため、それらはすべて同じパスワードを共有する必要があります。

  6. 「servers.txt」と同じディレクトリに、「ChangePassword.tcl」という名前の新しいテキスト ファイルを作成します (または任意の名前を付けますが、そのファイル タイプが「tcl」であることを確認してください)。ファイルを右クリックし、メモ帳 (または好みのテキスト エディター) で編集して、このスクリプトを貼り付けます。

    package require Expect
    
    exp_log_user 0
    set exp::nt_debug 1
    
    proc changepw {host user oldpass newpass} {
           spawn plink $host
           log_user 0
           expect {
               "login as: " { }
           }
           exp_send "$user\r"
           expect "sword: "
           exp_send "$oldpass\r"
           expect "\$ "
           exp_send "passwd\r"
           expect "sword: "
         exp_send "$oldpass\r"
         expect "sword: "
         exp_send "$newpass\r"
         expect "sword: "
         exp_send "$newpass\r"
           set result $expect_out(buffer)
           exp_send "exit\r"
           return $result
    }
    
    label .userlbl -text "Username:"
    label .oldpasslbl -text "\nOld Password: "
    label .newpasslbl -text "\nNew Password: "
    
    set username "username"
    entry .username -textvariable username
    set oldpassword "oldpassword"
    entry .oldpassword -textvariable oldpassword
    set newpassword "newpassword"
    entry .newpassword -textvariable newpassword
    
    button .button1 -text "Change Password" -command {
      set fp [open "servers.txt" r]
      set file_data [read $fp]
      close $fp
      set data [split $file_data "\n"]
      foreach line $data {
          .text1 insert end "Changing password for: $line\n"
        set output [changepw $line $username $oldpassword $newpassword]
        .text1 insert end "$output\n\n"
      }
    }
    
    text .text1 -width 50 -height 30 
    pack .userlbl .username .oldpasslbl .oldpassword .newpasslbl .newpassword .button1 .text1
    
  7. スクリプトを保存してから、ChangePassword.tcl ファイルを起動します。

ChangePassword.tcl ファイルを開くと、次のようになります。 バックグラウンドでservers.txtを開いた状態でパスワードを変更するTCLプログラム

残りは一目瞭然です。パスワードの変更が成功した場合、プログラムは出力しませんが、失敗した場合は通知することに注意してください。また、これは私の最初の tcl スクリプト (そして初めて Expect を使用したもの) であったため、スクリプトは決して「最適化」されておらず、おそらく改善される可能性がありますが、仕事は完了します。自由に編集したり、提案/改善を行ってください。

于 2012-10-23T16:08:39.090 に答える
1

コンソール アプリケーションのキーボードでの入力を模倣できる TCL の拡張であるExpectが必要なようです。これを行う方法については、例を参照してください。

今、あなたが私を心配する何かを書いています:

パテで接続タイプ「SSH」を使用して、8つの異なるUNIXサーバーに接続します。各サーバーで同じユーザー名/パスワードを使用しています。

ログオンの自動化に SSH キーを使用しないのはなぜですか?

于 2012-10-22T15:54:23.443 に答える
0

素晴らしい記事です!ステップ3について詳しく説明しています。接続の問題が原因で「teacup install Expect」が失敗した場合に備えて、プロキシ サーバー情報を提供するコマンドに注意してください。

%teacup install Expect
    Resolving Expect ... Not found in the archives.
    ...
    Aborting installation, was not able to locate the requested entity.
    child process exited abnormally
% teacup list teacup
    0 entities found
    Problems which occurred during the operation:
    * http://teapot.activestate.com :
    {connect failed connection refused} {can't read
    "state(sock)": no such element in array while executing
    "fileevent $state(sock) writable {}"} NONE
% teacup proxy "abcproxy.mycorp.com" 8080
    Proxying through abcproxy.mycorp.com @ 8080
% set http_proxy_user MyNetworkID
    MyNetworkID
% set http_proxy_pass MyNetworkPassword
    MyNetworkPassword
% teacup list teacup
    entity      name   version         platform
    ----------- ------ --------------- ----------
    application teacup 8.5.16.0.298388 win32-ix86
    ----------- ------ --------------- ----------
    1 entity found
% teacup install Expect
    Resolving Expect ... [package Expect 5.43.2 win32-ix86 @ http://teapot.activestate.com]
    Resolving Tcl 8.4 -is package ... [package Tcl 8.6.1 _ ... Installed outside repository, probing dependencies]
    Retrieving package Expect 5.43.2 win32-ix86 ...@ http://teapot.activestate.com ...
    Ok
    Installing into C:/app/Tcl/lib/teapot
    Installing package Expect 5.43.2 win32-ix86
 %
于 2014-08-29T20:28:49.813 に答える