คุณเขียนสคริปต์ที่รัน scutil --nc start พร้อมชื่อการเชื่อมต่อ มันทำงานบน Mac ของคุณ และล้มเหลวบนเครื่องทุกเครื่องที่เพิ่งติดตั้งใหม่ในออฟฟิศ สคริปต์ไม่ได้เสีย มันถูกขอให้ทำสิ่งที่มันไม่เคยทำได้ การเริ่มการเชื่อมต่อที่มีอยู่แล้วไม่ใช่การดำเนินการเดียวกับการสร้างใหม่

การจัดเตรียมและการควบคุมเซสชันเป็นสองงานที่มีเจ้าของสองคน และลำดับงานที่สมมติตรงกันข้ามจะผ่านทุกการทดสอบบนเครื่องที่มันถูกเขียนขึ้น

คำสั่งเริ่มคุยกับอะไรจริง ๆ

คำสั่งควบคุมเซสชันกล่าวถึงการกำหนดค่าที่มีอยู่แล้วและได้รับการอนุมัติแล้ว มันขอให้ระบบยกการเชื่อมต่อที่ตั้งชื่อนั้นขึ้นมา โดยใช้การตั้งค่าเซิร์ฟเวอร์ การอ้างอิงตัวตน และนโยบายที่บันทึกไว้ก่อนหน้า หากสิ่งเหล่านั้นไม่เคยถูกติดตั้ง ก็ไม่มีอะไรให้เริ่ม

นั่นคือเหตุผลที่ความล้มเหลวปรากฏบนฮาร์ดแวร์ใหม่ ไม่ใช่บนแล็ปท็อปของผู้ดูแลระบบ แล็ปท็อปถูกจัดเตรียมไว้เมื่อหลายเดือนก่อนโดยคนที่ลืมไปแล้วว่าทำเช่นนั้น คิดว่าคำสั่งเริ่มเป็นเหมือนกริ่งประตูที่ใครบางคนเดินสายไว้เมื่อไตรมาสที่แล้ว การกดมันไม่เหมือนกับการเดินสายไฟ

เจ้าของสามคนของการกำหนดค่า VPN

โปรไฟล์ที่องค์กรจัดการมาจากการจัดการอุปกรณ์ โปรไฟล์มีที่อยู่เซิร์ฟเวอร์ การจัดรูปแบบการรับรองความถูกต้อง และนโยบายที่องค์กรต้องการ และผู้ดูแล VPN คือคนที่จัดหาให้ สคริปต์ไม่ควรสร้างการตั้งค่าเหล่านั้นขึ้นใหม่จากชื่อที่แสดงซึ่งพบในรายการ

การกำหนดค่า VPN ส่วนบุคคลแบบเนทีฟสร้างผ่าน Network Extension API ของ Apple ซึ่งครอบคลุมโปรโตคอล IPsec และ IKEv2 ที่มีมาให้ในเครื่อง นี่คืออินเทอร์เฟซแอปพลิเคชันที่มีขั้นตอนบันทึกและการอนุมัติจากผู้ใช้ ไม่ใช่คำสั่งเชลล์ที่สร้างอุโมงค์ชนิดใดก็ได้ที่ผู้จำหน่ายส่งมอบอย่างเงียบ ๆ

ไคลเอนต์ของบุคคลที่สามเป็นกรณีที่สาม ซึ่งมีรูปแบบการนำเข้าของตัวเอง เครื่องมือจัดการของตัวเอง และบ่อยครั้งมีตัวช่วยที่มีสิทธิพิเศษของตัวเอง เซสชันของมันเป็นของกระบวนการของผู้จำหน่ายรายนั้น การพบบริการระบบที่มีชื่อคล้ายกันไม่ใช่หลักฐานว่าคำสั่งระบบควบคุมอุโมงค์ และการสมมติเช่นนั้นทำให้เกิดสคริปต์ที่ดูเหมือนทำงานได้จนกว่าผู้จำหน่ายจะอัปเดตไคลเอนต์

การจัดเตรียมแบบเนทีฟมีการบันทึกและการอนุมัติ

รูปแบบของ Apple คือ โหลด แก้ไข บันทึก แอปพลิเคชันโหลดการตั้งค่าที่มีอยู่ก่อนการบันทึกครั้งแรกหลังเปิดใช้งาน เปลี่ยนแปลงการกำหนดค่าแล้วจึงบันทึก การบันทึกรายงานข้อผิดพลาดเมื่อไม่สามารถคงอยู่ได้ และการเพิกเฉยต่อผลลัพธ์นั้นจะทำให้ความล้มเหลวในการจัดเตรียมกลายเป็นความล้มเหลวในการเชื่อมต่อในอีกสามขั้นตอนถัดมา

การบันทึกครั้งแรกยังต้องให้ผู้ใช้อนุมัติแอปพลิเคชันด้วย นี่คือขอบเขตความปลอดภัยที่ตั้งใจไว้ และหมายความว่าการรันครั้งแรกบน Mac เครื่องใหม่เป็นการโต้ตอบ แม้การเชื่อมต่อและการตัดการเชื่อมต่อทุกครั้งหลังจากนั้นจะทำให้เป็นอัตโนมัติได้ วางแผนการรันครั้งแรกเป็นงานของมนุษย์ที่มีมนุษย์อยู่ด้วย ทำให้การรันครั้งที่สองเป็นต้นไปเป็นอัตโนมัติ และเขียนสิ่งนั้นไว้ใน runbook เพื่อไม่มีใครสัญญาสิ่งที่เป็นไปไม่ได้ แผนการติดตั้งที่สัญญาว่าการรันครั้งแรกจะไม่มีคนเฝ้าดูเลยกำลังสัญญาสิ่งที่แพลตฟอร์มไม่ได้มีให้

Apple ยังแนะนำให้ตรวจสอบความเข้ากันได้ของเซิร์ฟเวอร์ด้วยโปรไฟล์การกำหนดค่าก่อนที่จะพึ่งพา API การตรวจสอบนั้นก่อนจะแยก «เซิร์ฟเวอร์จะไม่ยอมรับไคลเอนต์นี้» ออกจาก «ไคลเอนต์ไม่เคยบันทึกการตั้งค่า» ซึ่งเป็นตั๋วที่แตกต่างกันสำหรับทีมที่แตกต่างกัน

คำสั่งเริ่มที่ทำซ้ำได้สามารถสมมติอะไรได้บ้าง

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

สำหรับการเชื่อมต่อแบบเนทีฟ คำขอเซสชันที่ตั้งชื่อเช่น scutil --nc start เป็นการดำเนินการควบคุม มันไม่ติดตั้งการตั้งค่าเซิร์ฟเวอร์ ไม่นำเข้าข้อมูลรับรอง และไม่ดำเนินการอนุญาตการบันทึกครั้งแรก มองมันเป็นขั้นตอนสุดท้ายของห่วงโซ่ ไม่ใช่ทั้งห่วงโซ่

เก็บความลับให้พ้นจากอาร์กิวเมนต์บรรทัดคำสั่งและจากเอาต์พุตการวินิจฉัยปกติ กลไกตัวตนใดก็ตามที่การติดตั้งเลือก คือสิ่งที่คำสั่งเริ่มควรพึ่งพา และรหัสผ่านที่วางในประวัติเชลล์คือสิ่งที่พบได้ในการตรวจสอบใด ๆ

การตรวจสอบการยอมรับสองอย่าง

การตรวจสอบแรกคือการจัดเตรียม นำ Mac ที่เพิ่งติดตั้งใหม่มาและพิสูจน์ว่าการกำหนดค่ามีอยู่ เป็นของผู้จัดการที่ถูกต้อง และได้รับการอนุมัติอย่างสมบูรณ์ ทำสิ่งนี้ก่อนทดสอบการเชื่อมต่อ เพราะการทดสอบการเชื่อมต่อบนเครื่องที่ยังไม่ได้จัดเตรียมไม่ได้พิสูจน์อะไรเกี่ยวกับสคริปต์

การตรวจสอบที่สองคือเซสชัน เชื่อมต่อ เข้าถึงทรัพยากรที่ได้รับอนุญาต และตัดการเชื่อมต่ออย่างสะอาด ตอนนี้ทุกความล้มเหลวมีเจ้าของ ซึ่งเป็นประโยชน์เชิงปฏิบัติของการแยกสองงาน โปรไฟล์ที่หายไปเป็นปัญหาการส่งมอบ ข้อผิดพลาดในการบันทึกเป็นปัญหาการอนุมัติ การเข้าสู่ระบบที่ถูกปฏิเสธเป็นปัญหาการรับรองความถูกต้อง และการหมดเวลาหลังการเริ่มที่สำเร็จคือชั้นเซสชัน ไม่มีข้อใดเป็น «สคริปต์เสีย»

บทความที่เกี่ยวข้อง