Menjalankan VPN Mac yang tersimpan dari terminal dengan scutil --nc
Gunakan scutil --nc untuk menjalankan, memeriksa, dan menghentikan layanan VPN macOS yang tersimpan, jaga kredensial tetap di luar argv, dan buktikan bahwa lalu lintas benar-benar memakai terowongan.
Anda punya layanan VPN tersimpan di Pengaturan Sistem, dan ingin terminal menyalakannya. Di macOS jalur yang didukung adalah scutil --nc, tetapi hanya untuk layanan yang dimiliki manajer koneksi jaringan sistem itu sendiri. Bilah menu bukan API: klien pihak ketiga biasanya punya otomatisasi sendiri, dan profil yang didorong oleh layanan manajemen bisa menolak start lokal. Ini daftar periksa yang saya jalankan: temukan layanan yang tepat, baca statusnya, jalankan, tunggu status berubah, lalu buktikan bahwa lalu lintas benar-benar memakai terowongan. Berhenti pada langkah pertama yang tidak cocok, karena setiap perintah berikutnya mengasumsikan perintah sebelumnya berhasil.
Temukan layanan sebelum mencoba menjalankannya
Mulai dari inventaris, bukan dari nama profil yang Anda ingat:
scutil --nc help
scutil --nc list
Setiap baris memasangkan status dengan pengenal layanan, jenis, dan nama tampilan. Pengenal adalah nilai untuk penulisan skrip, karena nama tampilan berulang dan bisa diedit. Panduan scutil Apple mendokumentasikan mode koneksi jaringan, sedangkan --nc help yang terpasang adalah daftar subperintah yang otoritatif di Mac itu; jangan mengasumsikan sebuah flag dari panduan lama masih ada di versi macOS Anda.
Daftar kosong adalah hasil, bukan kesalahan. Layanan yang dibuat klien vendor atau profil manajemen bisa aktif saat tak terlihat di sini, atau terlihat dengan jenis yang tidak bisa dikendalikan pengendali bawaan. Dalam kasus itu, gunakan alat vendor atau dokumentasi profil. Membuat profil bawaan paralel hanya agar ada yang bisa dijalankan adalah pertukaran buruk.
Baca status saat ini dan pastikan pemilihnya
Tanyakan status layanan sebelum menjalankannya, agar Anda tahu apa yang harus berubah saat start berhasil:
scutil --nc status "Office VPN"
Jika dua layanan berbagi nama tampilan, namanya ambigu. Berikan pengenal sebagai gantinya; perintah menerima keduanya, tetapi hanya pengenal yang dijamin memilih satu layanan. Periksa bahwa kata status adalah salah satu yang Anda kenal — biasanya Connected, Disconnected, Connecting, atau Disconnecting — sebelum mengurainya dalam skrip. Periksa juga apakah profil dikelola, karena konfigurasi terkunci bisa menerima perintah tetapi tetap mengabaikannya atau meminta konfirmasi.
Panggilan status ini murah, jadi gunakan sebagai penjaga dalam otomatisasi: jalankan hanya saat status Disconnected, dan jangan anggap Connecting sebagai kegagalan. Jika layanan sudah Connected, lewati start daripada mengganggu terowongan yang berfungsi.
Jalankan koneksi dan tunggu status stabil
Permintaan start bersifat asinkron. Perintah kembali saat permintaan diterima, bukan saat autentikasi selesai atau rute terpasang. Jalankan, lalu periksa status dengan tunggu terbatas dan keluar jika layanan kembali ke Disconnected:
scutil --nc start "Office VPN"
n=0
while [ "$n" -lt 30 ]; do
state=$(scutil --nc status "Office VPN" | head -n 1)
[ "$state" = "Connected" ] && break
[ "$state" = "Disconnected" ] && { echo "start failed"; exit 1; }
sleep 2
n=$((n + 1))
done
Status Connecting yang tidak pernah selesai biasanya menunjuk ke kredensial, MFA, atau server, bukan scutil. Perintah tidak bisa menyediakan login interaktif, jadi profil yang mengharapkan token atau kunci perangkat keras akan tertahan di Connecting dan akhirnya mundur. Baca kata status sebelum menambahkan percobaan ulang; perulangan melawan prompt autentikasi tidak bisa berhasil.
Jangan anggap status keluar shell sebagai kesiapan. Sinyal yang berguna adalah string status, diikuti bukti bahwa terowongan membawa lalu lintas. Perintah start yang kembali diam-diam tetap bisa meninggalkan Anda dengan koneksi yang tidak pernah terautentikasi.
Buktikan terowongan membawa lalu lintas, bukan hanya mengatakan Connected
Connected menjelaskan koneksi, bukan keputusan perutean. Layanan PPP dan IKEv2 bawaan membuat antarmuka ppp atau utun dan memasang rute, sedangkan terowongan terpisah sengaja membiarkan rute default. Periksa antarmuka dan kedua keluarga alamat:
ifconfig -l
netstat -rn -f inet
netstat -rn -f inet6
scutil --dns
Temukan antarmuka yang dibuat layanan daripada menebak nomor, lalu tanyakan tabel perutean antarmuka mana yang dipakai tujuan tertentu: route -n get 10.0.0.10, dengan host internal sebagai gantinya. Jika melaporkan antarmuka fisik, terowongan aktif tetapi tidak membawa aliran itu. Periksa rute terowongan terpisah, urutan resolver, dan aturan firewall lokal yang mengizinkan antarmuka terowongan tetapi bukan prosesnya.
Resolusi nama adalah negatif palsu yang biasa. Nama internal bisa diresolusi lewat resolver yang salah saat terowongan sepenuhnya sehat, yang tampak seperti kerusakan VPN dan bukan. scutil --dns menunjukkan urutan yang akan dipakai macOS; setelah perubahan resolver, bersihkan cache dengan dscacheutil -flushcache dan sudo killall -HUP mDNSResponder.
Jauhkan kredensial dan hak istimewa dari baris perintah
Jangan pernah menaruh kata sandi, kunci yang dibagikan sebelumnya, atau token di argumen. Argumen terlihat di daftar proses dan masuk ke riwayat shell, dan transkrip dukungan yang disalin bisa membocorkannya. Penanganan kredensial profil itu sendiri — entah item Keychain, prompt sistem, atau alur autentikasi klien — adalah tempat untuk rahasia.
Menjalankan perintah dengan sudo tidak membuat login interaktif menjadi tanpa pengawasan. Itu mengubah pengguna efektif, bukan ketersediaan prompt GUI, token perangkat keras, atau keychain login. LaunchAgent dapat menjalankan layanan setelah pengguna masuk dan keychain terbuka; LaunchDaemon biasanya tidak dapat menjangkau bagian sesi pengguna itu. Jika organisasi mengelola layanan, aturan siklus hidupnya menang atas skrip lokal mana pun.
Hentikan layanan dan pastikan tetap berhenti
Hentikan dengan pemilih yang sama yang Anda pakai untuk start, lalu baca status kembali alih-alih menganggap terowongan sudah hilang:
scutil --nc stop "Office VPN"
scutil --nc status "Office VPN"
Penghentian yang kembali ke Disconnected masih menyisakan satu hal untuk diperiksa: apakah profil diatur untuk menyambung sesuai permintaan, yang bisa mengembalikannya tanpa skrip Anda. Jika klien lain memiliki rute di Mac yang sama, rute itu bisa bertahan dari penghentian bawaan. Jalankan ulang pemeriksaan rute sebelum menyimpulkan mesin sudah keluar dari VPN.
Untuk pembungkus yang Anda jalankan manual, jaga urutannya tetap: daftar, status, start, periksa, uji rute, hentikan, verifikasi. Jangan mengurai nama ramah dari keluaran bebas saat pengenal tersedia, dan jangan anggap keluaran perintah start sebagai kesiapan. Manajer koneksi melaporkan status; bukti Anda adalah status plus rute yang menunjuk ke terowongan.