การส่งคำสั่ง CISCO ที่ส่งผ่าน SSH / Telnet

ข้อมูลทั่วไป

  • ชื่อสคริปต์: publip.sh (publi (จุด) sh ... publipSH
  • ความยืดหยุ่น: ปรับแต่งได้อย่างเต็มที่
  • ข้อ จำกัด : ต้องการรหัสผ่านที่เหมือนกันสำหรับอุปกรณ์ทั้งหมดหรือคุณจะต้องเพิ่มรหัสสองสามบรรทัด ...
  • ระดับความเสี่ยง: สูง ใช้ความระมัดระวังกับรายการการจัดการที่ไม่ถูกต้องอาจทำให้เครือข่ายทั้งหมดของคุณค้าง
  • ต้องการความรู้เกี่ยวกับ Linux: เปิด / แก้ไขไฟล์ (vi file_name) และบันทึกการแก้ไข (Esc แล้ว: wq?. เรียกใช้สคริปต์โดยใช้คำสั่ง. / สคริปต์ชื่อจากโฟลเดอร์เป้าหมาย

สคริปต์ publip.sh คืออะไร

สคริปต์นี้อนุญาตให้ผู้ดูแลระบบเครือข่ายส่งคำสั่งของ Cisco ในอุปกรณ์ระยะไกลที่เลือกจำนวนหนึ่ง (เราเตอร์ไฟร์วอลล์สวิตช์จุดเชื่อมต่อไร้สาย ... ) ผ่าน SSH หรือ Telnet (สคริปต์จะจัดการการเชื่อมต่อทั้งสองประเภทโดยอัตโนมัติ)

  • บรรทัดคำสั่งเหล่านี้จะถูกป้อนในลำดับเริ่มต้นหนึ่งคำสั่งต่อบรรทัด (เป็นชุดหรือไฟล์การกำหนดค่า) ในไฟล์ขนาดเล็กที่เรียกว่า commandes.txt (ไม่ จำกัด ขนาด)
  • ป้อน IP ทั้งหมด (หรือนามแฝง DNS) สำหรับอุปกรณ์ต่างๆในเครือข่ายของคุณ (ไม่ จำกัด จำนวนอุปกรณ์)
  • ในที่สุดเมื่อเรียกใช้สคริปต์คุณจะถูกขอให้ป้อนรหัสผ่านซึ่งในกรณีของเราจะต้องเหมือนกันสำหรับอุปกรณ์ทั้งหมด

สคริปต์ไปไกลกว่านี้มาก!

อันที่จริงมันเป็นแบบอัตโนมัติและสามารถซ่อนข้อผิดพลาดในการเชื่อมต่อการป้อนข้อมูลและบันทึกการเปลี่ยนแปลงในไฟล์บันทึก สคริปต์นี้ยังระบุอุปกรณ์ที่สามารถเชื่อมต่อผ่าน SSH หรือ Telnet แล้วจะเก็บถาวรของขั้นตอนการสร้างข้อผิดพลาดที่สำคัญ (สคริปต์ผิดพลาดการตีความผิดของอุปกรณ์โดย commanf) ข้อผิดพลาดประเภทต่าง ๆ คือ:

  • 1 - การหมดเวลาเชื่อมต่อ
  • 2 - ข้อผิดพลาดการเข้าสู่ระบบรหัสผ่านไม่ถูกต้อง
  • 3 - DNS Alias ​​หรือ IP ไม่มีอยู่จริง
  • 4 - การขัดข้องของสคริปต์คาดหวัง (สร้างไฟล์บันทึกของอุปกรณ์)
  • 5 - ปิดใช้งานการเชื่อมต่อระยะไกล
  • 6 - แก้ไขนามแฝง DNS แต่ไม่มี IP ที่มีอยู่จริง
  • 7 - อุปกรณ์ไม่ใช่ Cisco (HP Procurve)
  • 8 - อุปกรณ์ที่ไม่ใช่ของซิสโก้ (X1000)
  • 9 - อุปกรณ์ที่ไม่ใช่ของซิสโก้ (Alcatel)
  • 10 -Sent command ไม่ได้รับการยอมรับจากอุปกรณ์
  • 11 - ข้อผิดพลาดที่ไม่ได้ระบุไว้ข้างต้น ($? = 1)

คุณจะสามารถทำงานบนอุปกรณ์ทั้งหมดของคุณในเวลาเดียวกันและรวบรวมข้อมูลที่มีค่าในเครือข่ายของคุณ!

เนื้อหาของไฟล์ย่อย

commandes.txt

คุณจะต้องป้อนคำสั่ง ... ไฟล์จะต้องทำการเปลี่ยนแปลงใด ๆ กับการกำหนดค่าเราเตอร์ที่เริ่มต้นด้วย "conf t" และ "end" การปรับเปลี่ยนจะต้องดำเนินการในลักษณะลำดับชั้นและอย่าลืมบันทึกการเปลี่ยนแปลงของคุณ! ตัวอย่างเล็ก ๆ :

 # commandes.txt conf t เราเตอร์ ospf 100 เครือข่าย 50.50.100.0 0.0.0.255 พื้นที่ 0 ออกจากอินเตอร์เฟส fa0 / 0 ip ospf สวัสดีช่วงเวลา 5 ip ospf ตายช่วงเวลา 20 พื้นที่ทางออก 0 การตรวจสอบข้อความ - ย่อยสิ้นสุด 

เขียน mem

liste.txt

ป้อนชื่อแทน IP หรือ DNS ของอุปกรณ์ทั้งหมดที่เกี่ยวข้อง:

 # liste.txt 10.25.85.46 routeur-marseille switch-assemblee-generale 80.54.136.105 

sript ไม่ได้คำนึงถึงพื้นที่ว่างเปล่า

สคริปต์

สคริปต์จะมีคำอธิบายภาพโดย # [1] ขนาดเล็กซึ่งจะกล่าวถึงที่ด้านล่างของสคริปต์

 #! / bin / bash # script.sh echo "veuillez donner le mot de passe" stty -echo # [1] อ่านรหัสผ่าน stty echo export ssh = "./ ssh.sh" # [2] export telnet = "./ telnet.sh "export erreur =" ./ rapport_erreurs.log "export temp =" ./ tmp_routeur.log "ส่งออก cmdcisco =" ./ commandes.txt "รายการการส่งออก =" ./ liste.txt " rm -f $ erreur # [3] rm -f $ ssh rm -f $ telnet cat $ liste | ในขณะที่อ่าน routeur; ทำอย่างไรถ้า ["$ routeur"! = ""] แล้วถ้า [! -f $ ssh] # [4] จากนั้น echo 'คาดหวัง 2> & 1 <> $ ssh echo' spawn ssh [อีเมลมีการป้องกัน] $ routeur '>> $ ssh echo' คาดหวัง {'>> $ ssh echo' "รหัสผ่าน:" {ส่ง "$ password \ r"} '>> หมดเวลา $ ssh echo' {exit} '>> $ ssh echo'} '>> $ ssh echo' คาดหวัง "#" '>> $ ssh cat $ cmdcisco | ในขณะที่อ่าน commande ทำ echo "send \" $ commande \ r \ "" echo 'คาดหวัง "#"' เสร็จแล้ว >> $ ssh echo 'ส่ง "exit \ r"' >> $ ssh echo 'คาดว่า "ปิด"' >> $ ssh echo 'exit' >> $ ssh echo 'EOF' >> $ ssh chmod + x $ ssh # [5] fi time -p $ ssh> $ temp 2> & 1 # [6] COD_RET = $? auth = "cat $ temp | grep -c" รหัสผ่าน: "" # [7] ถ้า ["$ auth" -gt "1"] จากนั้นแสดง "Problème d'authentification sur $ routeur!" echo "$ routeur: การเข้าสู่ระบบผิด / รหัสผ่าน" >> $ erreur ดำเนินการต่อ fi temps = "grep" จริง '$ temp | sed 's / real / § /' | ตัด-d'§ '-f2 | ตัด -d '' -f1 | ตัด -d '.' -f1 'ถ้า [$ temps -ge 10 -a! "'grep' ปิด '$ temp'"] # [8] จากนั้นจึงสะท้อน "L'equipement $ routeur ne réponds pas!"; echo "$ routeur: หมดเวลาการเชื่อมต่อ" >> $ erreur ดำเนินการต่อหาก ["$ COD_RET"! = "0"] # [9] จากนั้น #Erreur de connexion a''quipment en SSH if [! -f $ telnet] จากนั้น echo 'คาดว่า 2> & 1 <> $ telnet echo' วางไข่ telnet $ routeur '>> $ telnet echo' ส่ง "admin \ r" '>> $ telnet echo' คาดว่า "รหัสผ่าน:" '>> $ telnet echo 'ส่ง "$ รหัสผ่าน \ r"' >> $ telnet echo 'คาดหวัง "#"' >> $ telnet cat $ cmdcisco | ในขณะที่อ่าน commande ทำเสียงสะท้อน "send \" $ commande \ r \ "" echo 'คาดว่า "#" เสร็จแล้ว >> $ telnet echo' ส่ง "exit \ r" '>> $ telnet echo' คาดว่าจะ "ปิด" '>> $ telnet echo 'exit' >> $ telnet echo 'EOF' >> $ telnet chmod + x $ telnet fi $ telnet> $ temp 2> & 1 fi COD_RET = $? auth = "cat $ temp | grep -c" รหัสผ่าน: "" # [10] ถ้า ["$ auth" -gt "1"] จากนั้นแสดง "Problème d'authentification sur $ routeur!" echo "$ routeur: การล็อกอิน / รหัสผ่านไม่ถูกต้อง" >> $ erreur elif ["'grep' การค้นหาชื่อโฮสต์ล้มเหลว '$ temp'"] จากนั้นจึงสะท้อน "l'equipement $ routeur n'existe pas!" echo "$ routeur: ไม่มีอยู่" >> $ erreur elif ["'grep' ไม่ทราบโฮสต์ '$ temp'"] จากนั้นสะท้อน "la saisie de l'ip หรือชื่อ $ routeur ไม่ถูกต้อง!" echo "$ routeur: การสะกดผิด" >> $ erreur elif ["'grep' send: วางไข่ id exp4 ไม่เปิด '$ temp'"] จากนั้น echo "/! \ ERREUR ต้องเข้าสู่ระบบด้วยที่ปรึกษา !!" echo "$ routeur: คาดว่าการเรียกใช้สคริปต์ล้มเหลว!" >> $ erreur cp $ temp $ routeur.error.log elif ["'grep' การตรวจสอบความถูกต้องล้มเหลว '$ temp'"] จากนั้นจึงแสดงว่า "ไม่มีทางที่จะไปถึง $ routeur!" echo "$ routeur: การล็อกอิน / รหัสผ่านผิด" >> $ erreur elif ["'grep' การเชื่อมต่อถูกปฏิเสธ '$ temp'"] จากนั้นจึงสะท้อน "Connexion à distance sur $ routeur désactivé!" echo "$ routeur: การเชื่อมต่อ vty ถูกปิดใช้งาน" >> $ erreur elif ["'grep' ไม่มีเส้นทางไปยังโฮสต์ '$ temp'"] จากนั้นจึงสะท้อน "Alias ​​DNS $ เส้นทางมีอยู่ mais IP invalide!" echo "$ routeur: ไม่มีเส้นทางไปยังโฮสต์" >> $ erreur elif ["'grep' ProCurve '$ temp'"] จากนั้นจึงสะท้อน "routeur $ routeur HP และไม่ใช่ Cisco!" echo "$ routeur: ไม่ใช่เราเตอร์ของซิสโก้ (HP ProCurve)" >> $ erreur elif ["'grep' Alcatel '$ temp'"] จากนั้น echo "routeur $ routeur Alcatel และไม่ใช่ Cisco!" echo "$ routeur: ไม่ใช่เราเตอร์ของซิสโก้ (Alcatel)" >> $ erreur elif ["'grep' ยินดีต้อนรับสู่ X1000 '$ temp'"] จากนั้น echo "routeur $ routeur X1000 และไม่ใช่ Cisco!" echo "$ routeur: ไม่ใช่อุปกรณ์ของ Cisco (X1000)" >> $ erreur elif ["'grep'% คำสั่งที่ไม่รู้จัก '$ temp'" -o "'grep'% ไม่ถูกต้อง '$ temp'"] แล้ว echo "/! \ สั่งให้ซิสโก้ไม่ต้องเจรจาต่อรองคำแนะนำเพิ่มเติมเข้าสู่ระบบโดย $ routeur !!! " echo "$ routeur: พบคำสั่งที่ไม่รู้จัก" >> $ erreur cp $ temp $ routeur.error.log elif ["'grep' เชื่อมต่อกับ '$ temp'" -o "'grep' การเชื่อมต่อถูกปิดโดยโฮสต์ต่างประเทศ ' $ temp '"] แล้ว echo" $ routeur Telnet ตกลง! " elif ["'grep' Connexion enregistree sur le terminal '$ temp'" -o "'grep' การเชื่อมต่อกับ '$ temp'"] จากนั้นสะท้อน "$ routeur SSH OK!" elif ["$ COD_RET"! = "0"] แล้ว echo "Problème de connexion a l'equipement $ routeur!" echo "$ routeur: ปัญหาการเชื่อมต่อ" >> $ erreur fi fi เสร็จแล้ว rm -f $ temp # [11] ออก 

ความคิดเห็น

  • 1 : ซ่อนรหัสผ่าน
  • 2 : ไฟล์ทั้งหมดจะถูกเก็บไว้ในตัวแปร (เส้นทางสัมพัทธ์) ช่วยให้คุณสามารถเรียกใช้สคริปต์ได้จากทุกที่
  • 3 : ลบไฟล์ที่มีอยู่ที่สร้างขึ้นหากสคริปต์ได้รับการดำเนินการแล้ว
  • 4 : สร้างสคริปต์คาดหวัง
  • 5 : ตั้งค่าการอนุญาตสำหรับสคริปต์คาดหวัง
  • 6 : เรียกใช้งานสคริปต์คาดหวังรวมข้อผิดพลาดเอาต์พุตกับเอาต์พุตมาตรฐานคำนวณเวลาดำเนินการเพื่อจัดการการหมดเวลา
  • 7 : ตรวจสอบปัญหาการรับรองความถูกต้องโดยนับจำนวน "รหัสผ่าน" ที่เกิดขึ้นในไฟล์ temp
  • 8 : ตรวจสอบเวลาดำเนินการและตรวจสอบว่าไม่เกิน 10 (ค่าหมดเวลาที่คาดไว้)
  • 9 : สำหรับข้อผิดพลาดการเชื่อมต่อ SSH ทำซ้ำขั้นตอนผ่าน Telnet
  • 10 : ตรวจสอบทุกกรณีข้อผิดพลาดที่สร้างขึ้นโดยสคริปต์ (Cf II)
  • 11 : ลบไฟล์ชั่วคราว

บทความก่อนหน้านี้ บทความถัดไป

เคล็ดลับยอดนิยม