完全な自動化を実行します - あなたは、強力な証人と期待します

痛みのポイント:

自動化を達成するために、このプロセスを作る方法を、ホストB上でコマンドを実行し、ホストBにホストAからのSSHする方法LinuxはAとBをホスト2は、ありますか?あなたは、このアプローチを使用することがあります:

ssh [email protected] "ls"

しかし、この不器用な方法は、パスワードを毎回入力するには、いくつかの複雑なロジックまたはコマンドを実行することはできません。だから、どのようにそれの完全自動化を実現するには?この記事へのこの使用今日は要約を期待しています。

それは何を期待しますか?

期待は、人間の介入なしでインタラクティブなタスクを自動化するための無料のプログラミングツールです。期待して、はっきりそれを置くためには、自動的にインタラクティブ機能を実現するために使用されるソフトウェアのセットです。

実際、我々はコマンドを実行すると、スクリプトやプログラムでは、これらのコマンド、スクリプトやプログラムを手動で人間の入力を要求する端末から実行し続け、特定のコマンドを入力する必要があります。使用はあなたが自動化された相互作用の実行を可能にする、プログラムの手順、標準のアナログ入力に提供されるプロンプトに従うことができ、期待しています。これは期待です!

ベースを期待

1. sendコマンドは、文字列パラメータを受信し、このパラメータはプロセスに送信されます。
2.expectコマンドと私たちのフィードバック処理によれば、フィードバックの一般的に使用されるプロセスを待ってから、対応するコマンドの相互作用を送ることを期待し、代わりにコマンドを送信します。
3.spawnコマンドは、新しいプロセスを開始し産卵を送信し、コマンドが開いているとスポーンプロセスを使用対話を期待するために使用しました。
4.interactコマンドは、コマンドを送信し、私たちのタスクを完了するために非常に良いことを期待し、通常の状況下では、実際に使用多くの産卵ではありません。しかし、いくつかの特別な場合には、まだコマンドが相互作用を使用する必要があり、コマンドを対話オートメーションを終了するために使用されます人間の相互作用の中へ。例えば、我々は送信、卵を使用し、ファイルのダウンロードタスクを実行し、ftpコマンドがホストを上陸完了する予定が、我々は、ダウンロードファイルの終了後、あなたはまだ相互作用のコマンドを使用して、手動で、その後のコマンドを実行するために、ftpコマンドラインで、この時間をとどまることができることを願っていますこのタスクを完了するために非常に良いことができます。

ケーススタディ

バルクホストを追加するには上記の記事には、例えば、我々はZABBIX-APIインターフェースバルクを介してホストを追加し、まだ終了していない、監視対象ホストにエージェントを追加する必要があり、素晴らしいものはので、ここで過ごす、ワークロードを追加した場合ちょうどいい。

#!/bin/bash
user=linfan #主机用户名
pass='linfan123' #主机密码
for ip in `cat iplist.txt` #文件中放着需要执行命令的主机IP
do
  /usr/bin/expect << EOF
  set timeout 3  #链接超时3秒
  spawn scp /home/linfan/zabbix_xiufu.sh $user@$ip:/home/linfan/#将要执行的脚本传到需要执行命令的主机
    expect {
        "(yes/no)" {send "yes\r"; exp_continue}#出现“yes/no”的字样,就自动输入“yes”其中exp_continue表示循环式匹配,通常匹配之后都会退出语句,但如果有exp_continue则可以不断循环匹配,输入多条命令,简化写法。
        "password:" {send "$pass\r"}#出现“password:”字样,就自动输入密码
  }
  spawn ssh $user@$ip #远程切换到执行命令的主机中
  expect {
        "password:" {send "$pass\r"}#出现“password:”字样,就自动输入密码
  }
  expect "$user@*"  {send "sudo chmod 755 /home/linfan/zabbix_xiufu.sh\r";}#出现“用户名@任何的”字样 就给与脚本执行权限
  expect "$user@*"  {send "sudo /home/linfan/zabbix_xiufu.sh\r";}#出现“用户名@任何的”字样 就执行脚本
  expect "$user@*"  {send "exit\r"}##出现“用户名@任何的”字样 就退出
EOF
done

おすすめ

転載: blog.51cto.com/13858192/2424314