ฉันพยายามเขียนสคริปต์เพื่อทำให้ชุดงานของฉันง่ายขึ้น ฉันลองใช้คำสั่งเชลล์แล้ว แต่โค้ดดูตรงไปตรงมาเกินไปและพูดตามตรงว่ามือสมัครเล่นเกินไป ฉันกำลังพยายามเรียนรู้ Python สำหรับการเขียนสคริปต์ และด้วยความช่วยเหลือของคุณ ฉันหวังว่าปัญหานี้ของฉันจะกลายเป็นแนวทางปฏิบัติที่อธิบายได้
ต่อไปนี้คือโค้ดเชลล์ที่ฉันเขียน:
#!/usr/bin/expect
spawn telnet IPaddress
sleep 0.1
expect "Enter username and password"
send "username password \n"
sleep 0.1
send "debug; \n"
sleep 0.1
send "def t1 suspend_loader \n"
expect "enter subcommands"
send "traceback \n \n;"
sleep 1
send "act t1 \n"
sleep 0.1
send "quit \n"
sleep 0.1
send "stor2tst;audit_modules \n"
expect "PS Checksum audit completed"
send "quit \n"
sleep 0.1
send "debug"
sleep 0.1
send "print t1 \n"
sleep 0.5
send "quit \n"
sleep 0.1
send "logutil;open MOD;back all;quit \n"
sleep 0.1
send "debug \n"
sleep 0.1
send "di modules:pr.514 d 1 (&0) char n=68 \n"
send "quit \n"
sleep 1
send "quit \n"
send "logout \n"
interact
ตามที่คุณอาจเดาได้ รหัสนี้ออกแบบมาสำหรับอินเทอร์เฟซสวิตช์เฉพาะ พรอมต์ชื่อผู้ใช้และรหัสผ่านมาในบรรทัดเดียว มีระดับเชลล์เฉพาะ (เช่น ระดับการดีบัก) ที่ฉันต้องการเพื่อดำเนินการหลายคำสั่ง ฉันยังใช้โมดูลคาดหวังที่นี่ แต่ฉันคิดว่ามันผ่านไปโดยไม่ตรวจสอบสตริงในส่วนคาดหวัง ..
ฉันกำลังพยายามทำอะไร
ฉันต้องการเทลเน็ตไปยังรายการที่อยู่ IP ที่รู้จัก (เซิร์ฟเวอร์ 20 เครื่อง)
เซิร์ฟเวอร์ทั้งหมดมีชื่อผู้ใช้และรหัสผ่านเหมือนกัน
ฉันต้องการ เพื่อดำเนินการชุดคำสั่งเหล่านี้บนแต่ละเซิร์ฟเวอร์ และส่งคืนเอาต์พุตใดๆ ที่มีอยู่เพื่อแยกไฟล์บันทึกภายใต้ไดเร็กทอรีที่ระบุ (เช่น /tmp/dir)
นอกจากนี้ คำสั่งหลายคำสั่งจำเป็นต้องมี "double enter" เพื่อดำเนินการ! นั่นคือเหตุผลที่ฉันใช้ \n \n หลังจากคำสั่งย้อนกลับ
ขอขอบคุณสำหรับความช่วยเหลือใดๆ
ขอบคุณล่วงหน้า
expect
ต่อไปและเรียนรู้ที่จะรักภาษา TCL ซึ่งเหมือนกับ Python คือภาษาสคริปต์แบบไดนามิกที่มีความสามารถ ในการทำทุกสิ่งที่คุณต้องการ (รวมถึงการวนซ้ำ การประมวลผลอาร์กิวเมนต์บรรทัดคำสั่ง ฯลฯ ) - person larsks   schedule 26.08.2015telnetlib
คือหนทางที่จะไป stackoverflow.com/questions/10952514/telnetlib-python-example - person Joseph Farah   schedule 26.08.2015