複数のサーバーを監視するためにExpectを使用してスクリプトを作成しようとしています。接続はパスワードを使用してSSHを介して行われます。
私のデフォルトループが自動的に失敗し、Expect TCL言語がLinux forループ構文を受け入れるかどうかはわかりません。
パスワード:
#!/usr/bin/expect -f
server_list="/tmp/DR.txt"
for HOST in $(cat $server_list) ; do
spawn ssh -q $HOST
expect "assword:"
send "Abcd@123\r"
interact
echo ' '
echo "====For space utilization details for server $HOST===" >/tmp/space_utilization.log
Df -kh >> /tmp/space_utilization.log
echo ' '
done
ファイルには、/tmp/DR.txt
次の100個のサーバー名のリストが含まれています。
hzavks01
dzavks20
dzavks03
uzavks05
acavks30
私が得るエラーは次のとおりです。
[root@dzavks20 tmp]# ./expect.sh
invalid command name "server_list=/tmp/DR"
while executing
"server_list=/tmp/DR"
(file "./expect.sh" line 2)
ベストアンサー1
Expectを使用する必要がありますか? SSHを介してリモートでdfコマンドを実行し、情報を単一のファイルに収集する単純なbashシェルを持つことはできますか?
コールサーバーからすべてのサーバーへのSSHキーが設定ファイルに正しく設定されている場合は、パスワードを入力する必要はありません。次のループは、すべてのサーバーからdf出力を収集します。
while read -r h; do
echo "=== Space utilization for ${h} ==="
ssh "$h" df -kh
echo ""
done </tmp/DR.txt >/tmp/space_utilization.log