Menulis skrip klien VPN: pilih lapisan sebelum kata laluan
CLI vendor, rasdial, niat aplikasi atau automasi UI masing-masing gagal dengan cara berbeza. Pilih lapisan, jauhkan rahsia daripada argv, dan tunggu keadaan, bukan kod keluar.
Skrip memulakan klien VPN pada lapisan yang dipilih penulis, dan lapisan itu jarang menjadi lapisan yang diperlukan oleh kerja tersebut. Baris arahan vendor, pendail sistem pengendalian dan niat aplikasi mudah alih semuanya kembali pada titik berbeza dalam hayat sambungan. Mereka juga mengendalikan rahsia secara berbeza, dan perbezaan itu menentukan sama ada kata laluan kelihatan kepada setiap pengguna pada mesin. Pilih lapisan sebelum anda menulis baris pertama skrip.
Lapisan 1: baris arahan vendor
Kebanyakan klien desktop menyediakan baris arahan yang menerima nama profil dan, terlalu kerap, kata laluan. Klien lama Cisco menerima kata kerja connect dengan argumen pengguna dan kata laluan; macOS mendedahkan perkhidmatan terbina dalam melalui networksetup; NetworkManager menjawab nmcli. Panggilan ini kembali apabila arahan selesai, yang bukan detik yang sama apabila terowong menjadi boleh digunakan. Baca dokumentasi vendor untuk versi yang anda gunakan, kerana antara muka ini berubah dan sesetengahnya dibuang sepenuhnya.
nmcli connection up "Work VPN"
networksetup -connectpppoeservice "Work VPN"
Kelebihannya ialah vendor mengenali stor profilnya sendiri, jadi panggilan menggunakan konfigurasi yang sama seperti GUI. Kelemahannya ialah setiap vendor mencipta kata kerjanya sendiri, dan skrip untuk satu klien tidak berpindah ke klien lain. Anggap lapisan ini laluan terpendek apabila klien tetap dan versinya dipin.
Lapisan 2: perkhidmatan sistem pengendalian sendiri
Pada Windows, pendail ialah sebahagian daripada sistem pengendalian dan ia berfungsi terhadap entri buku telefon dan bukan stor profil vendor. Ini menjadikannya lebih mudah alih antara klien dan lebih mudah diskripkan daripada akaun perkhidmatan. Ia juga bermakna sambungan boleh wujud di satu tempat dan tidak di tempat lain, yang mengelirukan orang yang melihat senarai yang salah.
rasdial "Work VPN" user pass
Get-VpnConnection -Name "Work VPN" | Select-Object ConnectionStatus
Gunakan permukaan PowerShell apabila anda perlu mencipta atau membuang entri dan bukan mendailnya. Lapisan WMI dan cmdlet mendedahkan objek yang sama dengan nama berbeza, dan pembuangan ialah operasi berasingan daripada pemutusan. Skrip yang hanya mendail akan meninggalkan entri lapuk selepas migrasi. Periksa stor mana automasi anda menulis sebelum berjanji pembersihan berlaku.
Remove-VpnConnection -Name "Old VPN" -Force
Get-VpnConnection
Pada macOS, persamaannya ialah senarai perkhidmatan rangkaian, di mana perkhidmatan sedia ada disambungkan dengan nama dan bukan dicipta serta-merta.
Kelayakan bocor pada setiap lapisan, jadi pilih saluran
Apa-apa yang anda hantar pada baris arahan muncul dalam jadual proses untuk setiap pengguna tempatan, dan biasanya kekal dalam sejarah shell juga. Alternatif yang disokong OpenVPN ialah membaca rahsia daripada fail dengan --askpass, dan fail itu sendiri memerlukan kebenaran yang sepadan dengan kepercayaan yang anda berikan. Paip bernama mengelakkan penulisan rahsia ke cakera tetapi membenarkan mana-mana proses yang boleh membukanya menulis di sana. Pada Windows, simpan rahsia dalam pengurus kelayakan, atau dalam fail yang hanya boleh dibaca akaun perkhidmatan, dan jangan sekali-kali sebagai literal dalam fail kelompok.
openvpn --config /etc/openvpn/work.conf --askpass /etc/openvpn/work.secret --auth-nocache --daemon
ls -l /etc/openvpn/work.secret
Peraturan yang sama terpakai kepada token dan kod sekali guna: jika automasi memerlukannya, automasi memerlukan saluran yang bukan argumen baris arahan. Putarkan rahsia apabila anda menukar mekanisme, kerana nilai lama telah tertinggal di suatu log. Skrip yang berfungsi dan bocor bukan skrip yang berfungsi.
Tunggu keadaan, kemudian awasi satu pemilik
Setiap panggilan ini kembali sebelum terowong sedia, jadi tinjau keadaan yang didedahkan klien atau uji destinasi di dalamnya dengan had masa. Menyalin fail atau membuka sambungan pangkalan data sejurus selepas panggilan sambungan ialah perlumbaan, dan ia gagal secara berkala dengan cara yang kelihatan seperti kerosakan rangkaian.
ip link show tun0
nmcli -t -f GENERAL.STATE connection show "Work VPN"
curl -sS --max-time 5 https://app.internal.example/health -o /dev/null
Pemutusan mempunyai masalah yang sama secara terbalik: proses boleh keluar sebelum laluan hilang. Gunakan cangkuk klien di tempat ia wujud, seperti skrip up dan down daripada OpenVPN atau ExecStartPost unit systemd, kerana ia berjalan pada titik yang benar-benar anda pedulikan. Cangkuk berjalan dengan keistimewaan apa-apa yang memanggilnya, jadi cangkuk yang memulakan semula rangkaian memerlukan peraturan eksplisit dan bukan andaian. Kekalkan tepat satu pemilik sepanjang hayat sambungan.
Apabila dua penyelia memulakan dan menghentikan profil yang sama, hasilnya ialah gelung sambung semula yang terbaca seperti gangguan penyedia. Runbook tamat apabila lapisan didokumenkan, rahsia mempunyai saluran yang bukan argv, syarat tunggu ialah pemeriksaan keadaan dengan had masa, dan satu proses memiliki kitaran hayat.