Skrip Anda menyalakan VPN; itu bukan menyediakannya
Perintah mulai memerlukan koneksi yang sudah ada dan sudah disetujui. Pisahkan penyediaan dari kendali sesi, atau skrip hanya berfungsi di Mac Anda.
Anda menulis skrip yang menjalankan scutil --nc start dengan nama koneksi, skrip itu berfungsi di Mac Anda, dan gagal di setiap mesin kantor yang baru dipasang. Skrip itu tidak rusak. Skrip itu diminta melakukan sesuatu yang tidak pernah bisa dilakukannya: memulai koneksi yang sudah ada bukan operasi yang sama dengan membuat koneksi baru.
Penyediaan dan kendali sesi adalah dua pekerjaan dengan dua pemilik, dan alur kerja yang menganggap sebaliknya akan lulus setiap uji di mesin tempat alur itu ditulis.
Dengan apa perintah mulai sebenarnya berbicara
Perintah kendali sesi menyapa konfigurasi yang sudah ada dan sudah disetujui. Perintah itu meminta sistem menaikkan koneksi bernama tersebut, memakai pengaturan server, rujukan identitas, dan kebijakan yang disimpan sebelumnya. Jika semua itu tidak pernah dipasang, tidak ada yang bisa dimulai.
Itulah sebabnya kegagalan muncul pada perangkat keras baru dan bukan pada laptop administrator. Laptop itu disediakan berbulan-bulan lalu oleh orang yang sejak itu lupa telah melakukannya. Anggap perintah mulai sebagai bel pintu yang dipasangi kabel seseorang kuartal lalu. Menekannya tidak sama dengan memasang kabelnya.
Tiga pemilik konfigurasi VPN
Profil yang dikelola organisasi berasal dari manajemen perangkat. Profil itu membawa alamat server, tatanan autentikasi, dan kebijakan yang diwajibkan organisasi, dan administrator VPN adalah orang yang menyediakannya. Skrip tidak boleh membangun ulang pengaturan itu dari nama tampilan yang ditemukannya di daftar.
Konfigurasi VPN pribadi asli dibuat melalui Network Extension API milik Apple, yang mencakup protokol IPsec dan IKEv2 bawaan. Itu antarmuka aplikasi dengan langkah penyimpanan dan persetujuan pengguna, bukan perintah shell yang diam-diam membuat jenis terowongan apa pun yang dikirim vendor.
Klien pihak ketiga adalah kasus ketiga dengan format impornya sendiri, alat manajemennya sendiri, dan sering kali pembantu berhak istimewanya sendiri. Sesinya dimiliki proses vendor tersebut. Menemukan layanan sistem bernama serupa bukan bukti bahwa perintah sistem mengendalikan terowongan, dan menganggapnya demikian menghasilkan skrip yang tampak berfungsi sampai vendor memperbarui klien.
Penyediaan asli punya penyimpanan dan persetujuan
Model Apple adalah muat, ubah, simpan. Aplikasi memuat preferensi yang ada sebelum penyimpanan pertamanya setelah peluncuran, mengubah konfigurasi, lalu menyimpannya. Penyimpanan melaporkan galat ketika tidak dapat bertahan, dan mengabaikan hasil itu mengubah kegagalan penyediaan menjadi kegagalan koneksi tiga langkah kemudian.
Penyimpanan pertama juga menuntut pengguna menyetujui aplikasi. Itu batas keamanan yang disengaja, dan artinya eksekusi pertama di Mac baru bersifat interaktif meskipun setiap koneksi dan pemutusan berikutnya dapat diotomatiskan. Rencanakan eksekusi pertama sebagai tugas manusia dengan manusia yang hadir. Otomatiskan eksekusi kedua dan seterusnya, dan tulis itu di runbook agar tidak ada yang menjanjikan hal mustahil. Rencana penerapan yang menjanjikan eksekusi pertama sepenuhnya tanpa pengawasan menjanjikan sesuatu yang tidak ditawarkan platform.
Apple juga menyarankan memvalidasi kompatibilitas server dengan profil konfigurasi sebelum bergantung pada API. Melakukan pemeriksaan itu lebih dulu memisahkan «server tidak akan menerima klien ini» dari «klien tidak pernah menyimpan pengaturannya», yang merupakan tiket berbeda untuk tim berbeda.
Apa yang boleh diasumsikan perintah mulai yang dapat diulang
Setelah penyediaan, skrip dapat dengan aman menargetkan koneksi yang ada melalui antarmuka pemiliknya. Beri perintah itu identitas stabil koneksi plus tindakan yang Anda inginkan, dan tidak ada yang lain. Skrip tidak boleh membaca jalur preferensi yang ditebak, dan tidak boleh menganggap nama yang ditampilkan di menu unik di seluruh sistem.
Untuk koneksi asli, permintaan sesi bernama seperti scutil --nc start adalah operasi kendali. Perintah itu tidak memasang pengaturan server, tidak mengimpor kredensial, dan tidak melakukan otorisasi penyimpanan pertama. Perlakukan sebagai langkah terakhir rantai, jangan pernah sebagai seluruh rantai.
Jauhkan rahasia dari argumen baris perintah dan dari keluaran diagnostik biasa. Mekanisme identitas apa pun yang dipilih penerapan adalah yang harus diandalkan perintah mulai, dan kata sandi yang ditempel di riwayat shell adalah temuan dalam tinjauan apa pun.
Dua pemeriksaan penerimaan
Pemeriksaan pertama adalah penyediaan: ambil Mac yang baru dipasang dan buktikan konfigurasi ada, dimiliki manajer yang benar, dan sepenuhnya disetujui. Lakukan ini sebelum menguji konektivitas, karena uji koneksi pada mesin yang belum disediakan tidak membuktikan apa pun tentang skrip.
Pemeriksaan kedua adalah sesi: sambungkan, capai sumber daya yang diizinkan, dan putuskan dengan bersih. Setiap kegagalan kini punya pemilik, dan itulah manfaat praktis memisahkan kedua pekerjaan. Profil yang hilang adalah masalah pengiriman, galat penyimpanan adalah masalah persetujuan, login yang ditolak adalah masalah autentikasi, dan waktu tunggu setelah mulai berhasil adalah lapisan sesi. Tidak satu pun dari itu «skripnya rusak».