Klien VPN memerlukan bantuan berkeistimewaan untuk mengkonfigurasi semula rangkaian, dan fakta itu digunakan terlalu luas kepada segala-galanya di sekelilingnya. Skrip yang melekap perkongsian fail tidak memerlukan root, kerana perkongsian itu milik sesi pengguna yang log masuk dan kelayakan pengguna tersebut. Mengeluarkan lekapan daripada laluan berkeistimewaan menghapuskan keperluan peraturan sudo, cangkuk root dan suntingan pada aplikasi terbina. Apa yang tinggal ialah applet kecil yang kekal terbuka, memantau satu profil dan membuat satu percubaan.

Mengapa ini tergolong dalam sesi pengguna

Volum yang dilekapkan ialah sifat sesi yang melekapkannya. Sesi pengguna lain tidak melihatnya, dan lekapan milik root berkelakuan berbeza daripada yang dicipta oleh Finder. Mengekalkan lekapan dalam sesi pengguna mengekalkan semantik itu.

Pembantu berkeistimewaan wujud untuk bahagian yang benar-benar memerlukannya: mencipta antara muka terowong, menukar laluan, mengemas kini penyelesai. Melekap perkongsian SMB bukan salah satu bahagian itu. Melayaninya seolah-olah ia adalah memaksa pilihan antara sudo tanpa kata laluan dan skrip root yang berjalan ketika tiada sesiapa hadir. Kedua-duanya ialah risiko yang lebih besar daripada yang wajar oleh masalah itu, dan pendekatan sesi pengguna mengelakkan pilihan itu sepenuhnya.

Cangkuk sambungan Tunnelblick sendiri bukan pengganti di sini, kerana ia berjalan di luar sesi desktop dan susunannya berbanding skrip klien tidak ditakrifkan. Meninjau keadaan daripada applet pengguna ialah mekanisme yang lebih kecil dengan andaian yang lebih sedikit.

Buktikan dahulu secara manual bahawa perkongsian berfungsi

Automasi tidak boleh membekalkan laluan, kebenaran atau akaun yang tidak wujud. Sambungkan VPN secara manual dan buka perkongsian dalam Finder sebelum menulis sebarang skrip. Jika itu gagal, skrip akan gagal dengan cara yang lebih mengelirukan.

Catat tiga nilai yang akan digunakan oleh skrip: nama profil tepat seperti yang disenaraikan oleh Tunnelblick, URL perkongsian dan nama volum yang ditunjukkan oleh Finder selepas dilekapkan. Nama volum penting kerana pemeriksaan lekapan sedia ada menggunakannya, dan pemeriksaan berdasarkan nama sahaja ialah pengawal kemudahan, bukan bukti identiti pelayan. Gunakan nama yang unik pada mesin itu. Kemudian sahkan bahawa pelayan itu menjawab sama sekali.

smbutil view //files.corp.example
osascript -e 'tell application "Tunnelblick" to get state of first configuration whose name is "Office"'
mount | grep -i smbfs

Perintah pertama membuktikan pelayan menjawab, yang kedua membuktikan nama profil diselesaikan, dan yang ketiga menunjukkan rupa lekapan yang berjaya. Rakam ketiga-tiganya sebelum mengautomasikan apa-apa.

Baca keadaan profil daripada Tunnelblick

Tunnelblick mendedahkan konfigurasinya dan keadaan masing-masing melalui AppleScript, dan itulah satu-satunya cangkuk yang diperlukan oleh reka bentuk ini. Keadaan yang penting ialah rentetan yang dilaporkan untuk profil tertentu itu, bukan kehadiran aplikasi.

Peninjauan mempunyai akibat yang wajar dinyatakan. Sambungan semula yang lebih pendek daripada selang itu boleh berlalu tanpa disedari, dan applet tidak melihat peralihan itu sama sekali. Itu boleh diterima untuk pengawal lekapan dan tidak boleh diterima bagi apa-apa yang mesti bertindak balas terhadap setiap peristiwa. Jika anda memerlukan kesetiaan peristiwa, ini mekanisme yang salah dan bukan mekanisme yang memerlukan pemasa yang lebih pendek. Pilih selang itu dengan pertukaran ini dalam fikiran.

property attempted : false

on idle
    set profileName to "Office"
    set shareURL to "smb://files.corp.example/OfficeTeam"
    set volName to "OfficeTeam"
    tell application "Tunnelblick" to set vpnState to state of first configuration whose name is profileName
    if vpnState is not "CONNECTED" then
        set attempted to false
        return 20
    end if
    tell application "Finder" to set mounted to (exists disk volName)
    if (not mounted) and (not attempted) then
        set attempted to true
        try
            mount volume shareURL
        end try
    end if
    return 20
end idle

Eksport sebagai aplikasi dengan pilihan kekal terbuka, kemudian lancarkannya dalam sesi yang log masuk dan bukan melalui sudo.

Lekap sekali, kemudian berhenti mencuba

Bendera telah dicuba ialah apa yang menghalang ini daripada menjadi gelung yang meneka kelayakan. Setelah applet mencuba, ia menunggu keadaan sambungan berubah sebelum mencuba lagi.

Tingkah laku itu disengajakan. Perkongsian yang menolak lekapan biasanya menolaknya atas sebab yang tidak dapat dibaiki oleh percubaan semula, dan percubaan berulang menjadikan satu gesaan menjadi aliran gesaan. Bendera ditetapkan semula apabila profil meninggalkan keadaan bersambung, jadi sambungan semula yang sebenar menghasilkan tepat satu percubaan baharu. Keluar dan melancarkan semula applet juga menetapkannya semula, dan itulah pengatasi manual. Tiada satu pun laluan itu menyembunyikan kegagalan; kedua-duanya membiarkannya kelihatan dalam Finder.

Skrip tidak membawa sebarang kata laluan, dan sepatutnya kekal begitu. Biarkan operasi lekapan meminta, dan biarkan rantai kunci melakukan apa yang disokong oleh organisasi. Membenamkan kelayakan dalam URL menjadikan skrip kemudahan sebagai rahsia yang perlu diputar.

Apa yang pembantu tidak boleh lakukan

Tiga had wajar ditulis di sebelah applet. Ia tidak boleh mengeluarkan volum sibuk selepas kegagalan rangkaian, ia tidak boleh menjamin bahawa DNS dan pelayan sedia apabila keadaan menyatakan bersambung, dan ia tidak bertindak balas terhadap setiap sambungan semula.

Had pertama paling penting dalam amalan. Perkongsian yang pelayan hilang meninggalkan volum yang kelihatan dilekapkan dan menyekat semasa akses, dan pembetulan yang sopan ialah menamatkan operasi fail dan mengeluarkannya sebelum pemutusan terancang. Yang kedua menjelaskan kebanyakan percubaan pertama yang gagal: terowong itu naik sementara penyelesai belum menyusul, jadi tunggu dan kemudian lekap secara manual sekali untuk mengesahkan. Yang ketiga ialah pertukaran peninjauan daripada tadi dan bukan pepijat untuk ditampal.

Untuk mesin tanpa pengawasan atau armada terurus, reka bentuk ini adalah bentuk yang salah. Gunakan dasar lekapan milik pentadbir dan bukannya memperluas applet desktop menjadi perkhidmatan berkeistimewaan.

Artikel berkaitan