วิธีเขียนสคริปต์ล็อกอิน AnyConnect บน Linux และ macOS
ไบนารี vpn อ่านคำตอบจากอินพุตมาตรฐานตามลำดับพรอมต์ สร้างลำดับให้ครบ อ้างคำพูดครั้งเดียว เก็บไว้นอกรายการโปรเซส และทดสอบทรัพยากรหนึ่งอย่างก่อน
สคริปต์จบด้วยศูนย์ อุโมงค์ปรากฏขึ้น และการรันครั้งถัดไปถูกปฏิเสธก่อนที่จะขอรหัสผ่านด้วยซ้ำ หรือคำสั่งเดียวกันทำงานในเทอร์มินัลแต่ล้มเหลวจากงานที่ตั้งเวลาไว้ด้วยข้อผิดพลาด «ไม่พบเหตุการณ์» ซึ่งไม่ได้ระบุชื่ออะไรที่เป็นประโยชน์ ทั้งสองกรณีคือการสนทนาผ่านอินพุตมาตรฐานของไคลเอนต์ AnyConnect ที่ผิดพลาด ไม่ใช่ความขัดข้องของเครือข่าย มองการล็อกอินเป็นคำถามและคำตอบที่เขียนไว้ แล้วความล้มเหลวจะคาดเดาได้และเล็กลง
ทำไมคำสั่งเดียวกันจึงล้มเหลวภายในสคริปต์
ไคลเอนต์อ่านคำตอบจากอินพุตมาตรฐาน บรรทัดละหนึ่งพรอมต์ ตามลำดับที่เกตเวย์ถาม อะไรก็ตามที่เปลี่ยนจำนวนพรอมต์ เช่น แบนเนอร์ใหม่ ตัวเลือกกลุ่ม หรือการท้าทายปัจจัยที่สอง จะเลื่อนคำตอบถัดไปทุกคำตอบไปหนึ่งบรรทัด จากนั้นไคลเอนต์จะอ่านชื่อผู้ใช้ในตำแหน่งที่คาดว่ารหัสผ่าน และรายงานความล้มเหลวที่ไม่ชี้ไปที่ทั้งสองอย่าง
รหัสผ่านที่มีเครื่องหมายอัศเจรีย์เพิ่มความล้มเหลวที่สองที่เงียบกว่า ภายในเครื่องหมายคำพูดคู่ เชลล์ขยายมันนานมากก่อนที่ไคลเอนต์จะเห็นอะไร
ใส่เพย์โหลดในเครื่องหมายคำพูดเดี่ยว แล้วอักขระจะเดินทางไปอย่างสมบูรณ์ นั่นคือการแก้ไขทั้งหมด และอธิบายรายงานทั้งชั้นที่ข้อมูลรับรองเดียวกันทำงานเมื่อพิมพ์และล้มเหลวเมื่อบันทึก ตรวจสอบว่าเชลล์ทำอะไรก่อนตรวจสอบเกตเวย์ พิมพ์เพย์โหลดผ่านตัวห่อที่แสดงไบต์ที่แน่นอนและนับบรรทัด การสอบสวนเหล่านี้ส่วนใหญ่จบลงตรงนั้น
เขียนคำตอบตามลำดับที่ไคลเอนต์ถาม
รันไคลเอนต์แบบโต้ตอบหนึ่งครั้งและจดทุกพรอมต์ตามลำดับ ตัวเลือกกลุ่มจะปรากฏเฉพาะเมื่อเกตเวย์เผยแพร่หลายโปรไฟล์ และพรอมต์แบนเนอร์จะปรากฏเฉพาะเมื่อมีการกำหนดค่าไว้ ไฟล์คำตอบต้องตรงกับเกตเวย์ที่คุณชี้ไปจริง ไม่ใช่เกตเวย์ในเอกสาร
จากนั้นสร้างไฟล์ด้วยลำดับที่แน่นอนนั้น คำตอบหนึ่งบรรทัด ดัชนีกลุ่มคือหมายเลขที่ไคลเอนต์แสดง ไม่ใช่ตำแหน่งของโปรไฟล์ในเอกสาร ยอมรับแบนเนอร์เฉพาะเมื่อเกตเวย์ของคุณส่งมา และเพิ่มบรรทัดสำหรับทุกคำถามเพิ่มเติมที่รู้ว่าเกตเวย์นั้นถาม เริ่มไคลเอนต์ด้วยแฟล็กไม่โต้ตอบเพื่อให้มันใช้ไฟล์แทนการรอเทอร์มินัล
connect vpn.lab.example
0
username
password
y
exit/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txtลำดับเดียวกันสามารถมาผ่านท่อเมื่อคุณไม่ต้องการเก็บไฟล์ไว้บนดิสก์ กฎการอ้างคำพูดยังคงเป็นตัวตัดสินว่าจะอยู่รอดหรือไม่
เก็บข้อมูลรับรองไว้นอกรายการโปรเซส
อาร์กิวเมนต์บนบรรทัดคำสั่งสามารถอ่านได้โดยผู้ใช้ท้องถิ่นทุกคนตลอดอายุของโปรเซส ดังนั้นรหัสผ่านจึงอยู่ในไฟล์หรือท่อและไม่เคยอยู่ในรายการอาร์กิวเมนต์ ทำให้ไฟล์นั้นอ่านได้เฉพาะบัญชีที่รันสคริปต์ และลบเมื่องานเสร็จ บน macOS ไบนารีมักอยู่ที่เส้นทางเดียวกับ Linux แต่ให้ยืนยันตำแหน่งที่ติดตั้งแทนการสันนิษฐาน ตัวห่อที่ทดสอบทั้งสองเส้นทางสั้นกว่ารายงานเหตุการณ์
printf 'username\npassword\ny\n' | /opt/cisco/anyconnect/bin/vpn -s connect vpn.lab.exampleอย่าให้สคริปต์ลองใหม่ไม่สิ้นสุดเช่นกัน แบนเนอร์ที่เปลี่ยนไปหรือรหัสผ่านที่หมดอายุข้ามคืนเปลี่ยนไฟล์คำตอบคงที่เป็นวงจรลองใหม่ และวงจรนั้นเองที่ล็อกบัญชี
ล้มเหลวหนึ่งครั้ง พิมพ์ข้อความข้อผิดพลาดของไคลเอนต์เอง แล้วออก งานที่ตั้งเวลาไว้ต้องการการทบทวนอัตลักษณ์และความพร้อมของข้อมูลรับรองเช่นเดียวกับงานอื่นที่ไม่มีการดูแล เพราะข้อมูลรับรองที่หมดอายุอย่างเงียบ ๆ แยกจากเหตุขัดข้องตอนตีสามไม่ได้
ยืนยันเซสชันก่อนเชื่อรหัสออก
สถานะที่เชื่อมต่อพิสูจน์ว่าอุโมงค์มีอยู่และไม่มีอะไรเกินกว่านั้น ทดสอบทรัพยากรหนึ่งอย่างที่ต้องเข้าถึงได้ผ่านมันก่อนที่สคริปต์จะเริ่มงานจริง และถือว่าความล้มเหลวตรงนั้นเป็นความขัดข้องที่ต่างจากการล็อกอินล้มเหลว มิฉะนั้นคุณจะลองใหม่กับการเชื่อมต่อที่ดีพร้อมซึ่งเพียงแต่ไปไม่ถึงปลายทาง
ถามไคลเอนต์ถึงสถานะก่อนและหลังการตัดการเชื่อมต่อ เพราะเซสชันที่เก่าอาจปฏิเสธการเชื่อมต่อครั้งถัดไปในขณะที่สคริปต์ของคุณรายงานความสำเร็จ
/opt/cisco/anyconnect/bin/vpn state
/opt/cisco/anyconnect/bin/vpn disconnectบันทึกเอาต์พุตสถานะไว้ข้างรหัสออก เพราะรหัสเดียวไม่สามารถแยกการล็อกอินที่ถูกปฏิเสธออกจากเซสชันที่ไม่เคยปิดได้ เมื่อเกตเวย์เรียกปัจจัยที่สองหรือการอนุมัติแบบโต้ตอบ ให้หยุดเขียนขั้นตอนนั้นเป็นสคริปต์และใช้กลไกที่ไคลเอนต์รองรับแทน ไฟล์คำตอบคงที่เป็นความสะดวกสำหรับข้อมูลรับรองที่คุณควบคุม ไม่ใช่วิธีหลีกเลี่ยงขั้นตอนการพิสูจน์ตัวตนที่คุณไม่ได้ควบคุม รักษาขอบเขตให้แคบเช่นนั้นแล้วสิ่งนี้ยังคงเป็นสคริปต์สั้น ๆ
เมื่อใดไฟล์คำตอบคงจึงเป็นเครื่องมือที่ผิด
ปัจจัยที่สองหรือพรอมต์อนุมัติเอาชนะรูปแบบนี้ได้ทั้งหมด และนั่นคือขอบเขตการออกแบบ ไม่ใช่ปริศนาสคริปต์ใช้กลไกใดก็ตามที่ไคลเอนต์รองรับสำหรับขั้นตอนนั้น แทนการเดาคำตอบล่วงหน้า ไฟล์คงทำงานได้เฉพาะกับข้อมูลรับรองที่คงเดิมระหว่างการรัน
รูปแบบข้อมูลรับรองเก่าสองแบบก็ถูกเข้าใจผิดว่าเป็น AnyConnect เช่นกัน โปรไฟล์ vpnc พูดโปรโตคอลอื่น และต้องการชื่อกลุ่มเป็นตัวระบุ IPSec จากนั้นเป็นความลับกลุ่มที่ใช้ร่วมกัน จากนั้นเป็นรายละเอียดบัญชีของคุณเอง
เนื่องจากโปรโตคอลต่างกัน vpnc จึงไปไม่ถึงเกตเวย์ที่เผยแพร่เฉพาะโปรไฟล์ AnyConnect และทางเลือกโอเพนซอร์สปกติสำหรับบริการนั้นคือ openconnect ที่เลือกโปรโตคอล anyconnect ไฟล์ pcf เป็นของไคลเอนต์ Cisco รุ่นเก่า และแม้โฮสต์ ชื่อกลุ่ม และรหัสผ่านกลุ่มจะป้อนใหม่ได้ในไคลเอนต์ที่ยังพูด Cisco IPsec ไฟล์ก็ไม่ย้ายข้ามไคลเอนต์ พอร์ตที่ผิดปกติหรือโหมดอุโมงค์ที่ไม่ได้มาตรฐานมักสูญหายในการย้ายนั้น ตัดสินใจว่าเกตเวย์เสนอโปรโตคอลใดก่อนเลือกเครื่องมือ