ทำอัตโนมัติการเข้าสู่ระบบ VPN เมื่อไคลเอนต์ไม่มี API หรือ CLI
เลือกเส้นทางสคริปต์ตามสิ่งที่ไคลเอนต์เปิดให้ใช้: โปรไฟล์ที่ระบบปฏิบัติการเป็นเจ้าของ CLI ของผู้จำหน่ายที่อ่านความลับจาก stdin หรือระบบอัตโนมัติแบบ GUI เป็นทางเลือกสุดท้าย
คำถามสามข้อตัดสินเรื่องนี้ และเพียงสามข้อ ไคลเอนต์สร้างรายการเชื่อมต่อในระบบปฏิบัติการที่อยู่รอดหลังรีบูตหรือไม่ มีบรรทัดคำสั่งที่ดึงความลับจากที่อื่นนอกเหนือจากรายการอาร์กิวเมนต์ของตัวเองหรือไม่ ข้อกำหนดด้านตัวตนบังคับให้มนุษย์ตอบพร้อมต์ของเบราว์เซอร์หรือไม่ ตอบตามลำดับนั้นแล้วการเลือกจะไม่ใช่เรื่องของรสนิยมอีก เพราะงานที่ตั้งเวลาไว้จะไร้หัวได้เพียงเท่าที่คำตอบที่อ่อนแอที่สุดในสามข้ออนุญาต
จับคู่ไคลเอนต์กับสามชั้นที่เขียนสคริปต์ได้
โปรไฟล์พื้นเมืองของ OS, CLI ของผู้จำหน่าย, ไคลเอนต์ที่มีแต่ GUI และไคลเอนต์แบบ SSO ผ่านเบราว์เซอร์ต้องใช้สี่แนวทางที่ต่างกัน สองอย่างแรกอยู่รอดจากการรีบูตโดยไม่มีคนเฝ้า และการรีบูตโดยไม่มีคนเฝ้าคือประเด็นทั้งหมด สองอย่างหลังต้องมีการตัดสินใจเชิงออกแบบก่อนจะต้องมีสคริปต์
| What the client exposes | What to script | What still bites |
|---|---|---|
| OS-native connection entry | rasdial, scutil --nc, nmcli | Tunnel is up before DNS and routes settle |
| Vendor CLI reading stdin | CLI wrapped by the scheduler, secret from the credential store | Prompt text changes between releases |
| GUI only | Pinned version plus a state assertion | Locale and DPI break the click targets |
เส้นทางที่หนึ่ง: ระบบปฏิบัติการเป็นเจ้าของโปรไฟล์อยู่แล้ว
นี่คือเส้นทางที่ถูกที่สุดและเป็นเส้นทางที่คนส่วนใหญ่มองข้าม บน Windows rasdial "Office" เชื่อมต่อ และ rasdial "Office" /disconnect ปิดการเชื่อมต่อ rasphone -d "Office" ขับเคลื่อนรายการเดียวกันผ่านอินเทอร์เฟซการหมุนหมายเลข macOS แสดงบริการที่บันทึกไว้ด้วย scutil --nc list และเริ่มหนึ่งรายการด้วย scutil --nc start ส่วน Linux มอบงานให้ NetworkManager
rasdial "Office" user *
scutil --nc start "Office"
nmcli connection up id Office
nmcli -t -f GENERAL.STATE connection show Officeอินเทอร์เฟซเหล่านี้รู้จักเฉพาะโปรไฟล์ที่ระบบปฏิบัติการเป็นเจ้าของ จึงไม่สามารถขับเคลื่อนไคลเอนต์ของบุคคลที่สามแบบใดก็ได้ เมื่อไม่มีโปรไฟล์ ให้สร้างขึ้นครั้งเดียวและให้สคริปต์ตรวจสอบแทนการสร้างใหม่ทุกครั้งที่รัน ทำให้สคริปต์เป็น idempotent: อ่านสถานะปัจจุบัน เชื่อมต่อเฉพาะเมื่อถูกตัดการเชื่อมต่อ แล้วทดสอบชื่อส่วนตัวที่งานต้องการจริง ๆ
เส้นทางที่สอง: ผู้จำหน่ายมีบรรทัดคำสั่งให้
ไคลเอนต์บางตัวเปิดบรรทัดคำสั่งมากพอจะห่อได้: Cisco AnyConnect มีตัวช่วยเชื่อมต่ออย่างเดียวมาหลายปี และ OpenConnect พูดโปรโตคอล AnyConnect, GlobalProtect และ Pulse จากไบนารีเดียว ข้อกำหนดที่สำคัญไม่ใช่รายการแฟล็ก แต่คือความลับมาจากไหน เพราะรหัสผ่านในรายการอาร์กิวเมนต์นั้นใครก็ตามที่ดูรายการโปรเซสได้ก็อ่านได้
printf '%s\n' "$VPN_PASS" | openconnect --protocol=anyconnect \
--user "$VPN_USER" --passwd-on-stdin vpn.example.comFortiClient และ GlobalProtect บางบิลด์ไม่มี CLI ที่รองรับเลย และไคลเอนต์ชุมชนหรือตัวแทนที่มีลิขสิทธิ์จากผู้จำหน่ายเป็นการตัดสินใจจัดซื้อ ไม่ใช่ทางลัด ใน CI ให้สิทธิ์บัญชีบริการกับไบนารีนั้นโดยตรง ไม่ใช่กับเชลล์ เพื่อให้อาร์กิวเมนต์ที่ถูกฉีดเข้าไปกลายเป็นคำสั่ง root ไม่ได้
เส้นทางที่สาม: ระบบอัตโนมัติแบบ GUI และทำไมจึงมาสุดท้าย
เมื่อไคลเอนต์อย่างเป็นทางการไม่มีอินเทอร์เฟซ สคริปต์จะคลิกปุ่มผ่านข้อความหน้าต่างหรือ SendKeys ซึ่งเปราะบางต่อเวอร์ชันและภาษา อาจทิ้งเซสชันที่เชื่อมต่อค้างไว้ครึ่งหนึ่ง และล้มเหลวอย่างเงียบ ๆ เมื่อกล่องโต้ตอบปรากฏในภาษาที่ผิด หากเลือกเส้นทางนี้ ให้ปักหมุดเวอร์ชันไคลเอนต์ ตรวจสอบสถานะการเชื่อมต่อที่ได้ในภายหลัง และเก็บแผนสำรองแบบทำมือที่จัดทำเอกสารไว้ข้างสคริปต์
ข้อควรระวังเดียวกันใช้กับการตัดการเชื่อมต่อไคลเอนต์ด้วยการฆ่าโปรเซสของมัน อุโมงค์อาจมีชีวิตอยู่ต่อไปได้หลังจากโปรเซสหายไป หรือผู้ดูแลอาจเริ่มมันใหม่ ดังนั้นฆ่าแล้วเริ่มใหม่ก็ไม่ใช่การรีเซ็ตที่เชื่อถือได้เช่นกัน
อะไรพังหลังจากอุโมงค์ขึ้นแล้ว
การเชื่อมต่อที่สำเร็จพิสูจน์เพียงการยืนยันตัวตนและไม่มีอะไรอื่น ทดสอบทรัพยากรที่งานนี้มีอยู่เพื่อเข้าถึง ด้วยโปรโตคอลของมันเองและเวลาหมดอายุสั้น ๆ และระบุขั้นตอนในข้อความล้มเหลว โปรไฟล์ ใบรับรอง และข้อมูลรับรองที่บันทึกไว้ซึ่งมองเห็นบนเดสก์ท็อปของคุณอาจมองไม่เห็นจากเซสชันของบริการ ดังนั้นให้รันงานหนึ่งครั้งภายใต้บัญชีของตัวจัดตารางเองก่อนจะไว้วางใจ
จำกัดการลองใหม่ วนซ้ำข้อมูลรับรองที่ถูกปฏิเสธจะล็อกบัญชี และพร้อมต์ MFA ที่งานไร้หัวไม่สามารถตอบได้หากไม่มีรูปแบบการลงทะเบียน การลองใหม่ด้วยสคริปต์กับโฟลว์ SSO ของเบราว์เซอร์เพียงเผาผลาญความพยายาม ควรใช้เพย์โหลด VPN ที่ส่งผ่าน MDM หรือโปรไฟล์การกำหนดค่าสำหรับฟลีต ซึ่งแพลตฟอร์มเป็นเจ้าของวงจรชีวิตของข้อมูลรับรอง และเก็บสคริปต์ไว้สำหรับไคลเอนต์ที่จัดการแบบนั้นไม่ได้
บันทึกรหัสออกและทรัพยากรแรกที่ล้มเหลว ไม่ใช่ข้อเท็จจริงที่สคริปต์รันแล้ว บรรทัดเดียวนั้นคือสิ่งที่เปลี่ยนการแจ้งเตือนของตัวจัดตารางให้เป็นการวินิจฉัยห้านาที