ตัวอย่างการใช้งาน expect เพื่อใช้ในการ ssh หรือ telnet แบบอัตโนมัติไปยังอุปกรณ์ที่ต้องการ และสั่งให้อุปกรณ์นั้นทำงานตามคำสั่งที่กำหนดไว้ล่วงหน้า เสมือนว่าเราเป็นพิมพ์คำสั่งเอง (ประมาณว่าทำ bot)
ระบบที่ใช้ทดสอบ
Telnet Client : Ubuntu Linux โดยเครื่องนี้จะเป็น Bot และทำการ remote ไปยังเครื่องเป้าหมาย และพิมพ์คำสั่งต่าง ตามที่ได้กำหนดไว้ก่อนแล้ว
Telnet Server : Cisco Catalyst 3560 โดยเครื่องนี้จะถูก bot ทำการ remote เข้ามาเก็บข้อมูลที่ต้องการ
ตัวอย่างโจทย์ : สมมุติว่า ต้องการเก็บข้อมูล Mac address ที่อยู่บน Interface FastEthernet 0/1 ของ Switch เป้าหมายทุกๆ 1 ชั่วโมง และเป็นแบบอัตโนมัติ
วิธีการแบบ Manual : ทำการ Telnet ไปยัง Switch ที่ต้องการ แล้วใช้คำสั่ง show mac-address-table interface fastEthernet 0/1 แล้วเก็บ Output ที่ได้ โดยวิธีการนี้ ผู้ได้รับมอบหมายต้อง Telnet เองทุกๆ 1 ชั่วโมง ดังตัวอย่าง
komkit@Linux:~$ telnet 192.168.0.1
Trying 192.168.0.1...
Connected to 192.168.0.1.
Escape character is '^]'.
User Access Verification
Username: komkit
Password:
Switch> show mac-address-table interface fastEthernet 0/1
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
1 001a.a026.466b DYNAMIC Fa0/1
1 001a.a026.466d DYNAMIC Fa0/1
Total Mac Addresses for this criterion: 2
Switch> exit
Connection closed by foreign host.
komkit@Linux:~$
จากวิธีการข้างต้น ผู้ดูแลระบบต้องทำการ telnet เข้าไปเองทุกๆ 1 ชั่วโมง เพื่อให้ได้ข้อมูลที่ต้องการ
วิธีการแบบอัตโนมัติ โดยใช้ expect บน Linux
แนวคิดคือ ทำเหมือนว่าเป็นคน Telnet เอง แต่ว่าจะให้ระบบ (bot) เป็นคนพิมพ์ให้
เริ่มด้วย ติดตั้ง expect
root@Linux:~# apt-get install expect
จากนั้นทำการสร้าง Script เพื่อให้ทำงานแทนเรา ดังตัวอย่าง
root@Linux:~# vi bot_telnet
#!/usr/bin/expect --
spawn telnet 192.168.0.1
expect "Username: "
send "komkit\r"
expect "pssword: "
send "TelnetPassword\r"
expect "Switch>"
send "show clock \r"
expect "Switch>"
send \r
expect "Switch>"
send "show mac-address-table interface fastEthernet 0/1 \r"
expect "Switch>"
send \r
expect "Switch>"
send exit\r
expect closed
exit 0
โดยค่าที่สนใจมีดังนี้
spawn คือ เริ่มทำงาน
expect คือ Prompt ที่สนใจ
send คือ เมื่อเจอ prompt ตาม expect ข้างต้นแล้ว ให้ส่ง Message หรือ Command เข้าไป (เหมือนว่าเรากำลังพิมพ์)
\r คือ กด Enter
ทำการ Save ไฟล์ แล้วทำการทดสอบดังนี้
root@Linux:~# expect bot_telnet
spawn telnet 192.168.0.1
Trying 192.168.0.1...
Connected to 192.168.0.1.
Escape character is '^]'.
User Access Verification
Username: komkit
Password:
Switch>show clock
12:23:09.058 GMT+7 Thu Dec 2 2010
Switch>
Switch>show mac-address-table interface fastEthernet 0/1
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
1 001a.a026.466b DYNAMIC Fa0/1
1 001a.a026.466d DYNAMIC Fa0/1
Total Mac Addresses for this criterion: 2
Switch>
Switch>exit
Connection closed by foreign host.
root@Linux:~#
จาก Output ดังกล่าวจะเห็นว่า เราได้ข้อมูลตามต้องการ ต่อไปก็นำ Script ดังกล่าวให้ทำงานโดย cron แล้วเก็บ Output ลงไฟล์ เช่น
1 * * * * root expect bot_telnet >> /home/komkit/Switch_MAC.log
เมื่อ Admin ต้องการดูข้อมูล ก็เข้าไปดู File ดังกล่าวได้ตลอดเวลา
ไม่มีความคิดเห็น:
แสดงความคิดเห็น