OpenVPN meminta nama pengguna dan kata laluan pada terminal kawalan, dan fail yang dialihkan ke input standard bukanlah terminal itu. Satu perincian itulah yang menjelaskan skrip yang tergantung padahal kata laluannya ada di dalam paip. Gesaan dilukis oleh klien dan pembacaan diambil daripada peranti terminal, jadi mengalihkan stdin tidak mengubah apa-apa. Beri klien input melalui salah satu laluan inputnya yang didokumenkan dan skrip yang sama akan bersambung pada cubaan pertama.

Tiga laluan meliputi hampir setiap kes, dan setiap satunya gagal dengan caranya sendiri. Pilih mengikut gesaan yang benar-benar ditunjukkan oleh klien, bukan mengikut pilihan yang paling mudah diskrip.

Gesaan itu tidak datang dari stdin

Apabila OpenVPN memerlukan kelayakan ia membuka terminal kawalan dan membaca di situ. Itulah sebabnya ujian interaktif kelihatan baik sementara arahan yang sama di bawah cron atau fail unit duduk diam dengan gesaan ditulis ke log yang tiada siapa memerhatikannya. Sesetengah binaan kembali ke input standard apabila tiada terminal, dan ketidakselarasan itu lebih buruk daripada kegagalan keras kerana ia menyembunyikan masalah sehingga penggunaan.

Periksa persekitaran sebelum menulis sebarang kod: jalankan klien di bawah pengguna yang sama, dengan stdin yang sama, seperti yang akan dilakukan oleh penjadual atau pengurus perkhidmatan. Jika gesaan tidak pernah muncul dalam log dan proses tidak bergerak, sesuatu sedang menunggu terminal yang tidak wujud.

Laluan satu: fail kelayakan dua baris

Pilihan pengesahan mengambil laluan, dan fail itu mengandungi tepat dua baris, nama pengguna kemudian kata laluan, tanpa apa-apa lagi. Berikan laluan itu secara eksplisit dan bukannya bergantung pada nama fail lalai, kerana fail kelayakan yang tersasar dalam direktori kerja ialah cara akaun yang salah akhirnya digunakan. Tetapkan mod kepada 0600 dan berikan pemilikan kepada akaun yang menjalankan klien.

Klien membaca fail itu sekali semasa permulaan, jadi memutar kata laluan bermakna memulakan semula proses. Biasanya itulah tingkah laku yang anda mahu, dan ia tergolong dalam runbook di sebelah prosedur putaran.

Laluan dua: askpass untuk frasa laluan kunci

Kunci persendirian yang dilindungi frasa laluan menimbulkan gesaan kedua yang berbeza, dan ia mempunyai jawapan berasaskan fail sendiri: pilihan askpass membaca frasa itu daripada baris pertama sesuatu fail. Untuk terowong berasaskan SSH padanannya ialah program askpass yang dilaksanakan oleh klien, dan output standardnya menjadi rahsia itu.

Tiada satu pun bentuk meletakkan rahsia dalam senarai argumen, dan kedua-duanya membiarkannya wujud sebagai fail atau sebagai program boleh laku yang mencetaknya. Perlindungannya ialah kebenaran fail dan pemilikan proses, bukan kesamaran. Pembantu yang menggemakan rentetan terbenam dalam kod ialah rahsia dengan langkah tambahan.

Laluan tiga: CLI klien portal itu sendiri

Klien perusahaan biasanya menyediakan titik masuk baris arahan yang bersambung ke portal bernama tanpa sebarang tetingkap, dan itulah laluan yang disokong. Pada Linux klien GlobalProtect menyediakan operasi sambung dan import sijil melalui CLI-nya, dan portal yang menggunakan pengesahan sijil memerlukan langkah import sebelum sambungan automatik boleh berfungsi. Utamakan ia berbanding tekanan kekunci sintetik: anda mendapat status keluar sebenar, tiada pergantungan pada fokus tetingkap, dan ia bertahan pada skrin berkunci.

Jika sambungan pertama masih memerlukan manusia untuk menerima sijil, automasi itu belum selesai. Lakukan import semasa persediaan dan catatkannya sebagai prasyarat.

Apabila aliran memerlukan pseudo-terminal

Urutan yang meminta kata laluan kemudian kod sekali guna tidak mempunyai satu fail untuk dibaca. Pemacu terminal seperti Expect ialah alat yang betul kerana ia menunggu setiap corak secara bergilir, dan ia memerlukan proses dimulakan sebelum ia boleh memadankan apa-apa.

Dua kegagalan mendominasi. Skrip yang menunggu gesaan tanpa memulakan klien menunggu selamanya, dan Tcl bukan shell, jadi aritmetik shell yang ditulis di dalam blok expect tidak dinilai seperti yang dibaca. Biarkan bendera nyahpepijat hidup semasa anda membina corak, kemudian matikannya.

Rahsia yang bocor, dan di mana ia bersembunyi

Apa sahaja yang dihantar sebagai argumen kelihatan dalam senarai proses, jadi kelayakan tempatnya dalam fail atau di belakang pembantu, tidak pernah pada baris arahan. Kod sekali guna dimakan mengikut reka bentuk dan mesti dihasilkan untuk setiap cubaan. Log kegagalan sering membawa nama pengguna dan kadangkala lebih, jadi suntinglah sebelum menghantarnya ke mana-mana, dan jauhkan rahsia daripada profil itu sendiri, kerana fail konfigurasi dengan kata laluan terbenam ditampal ke tiket dan repositori. Memutar akaun kemudian bermakna memburu setiap salinan, dan itulah tepat kos yang dielakkan oleh susun atur ini.

Audit laluan yang anda pilih, kemudian sambungkan ke fail unit atau penjadual yang benar-benar akan menjalankan klien. Terowong hidup tepat selama proses itu hidup.

Artikel berkaitan