Skrip keluar dengan sifar, terowong muncul, dan larian seterusnya ditolak sebelum ia sempat meminta kata laluan. Atau arahan yang sama berfungsi di terminal dan gagal daripada kerja berjadual dengan ralat «peristiwa tidak ditemui» yang tidak menamakan apa-apa yang berguna. Kedua-duanya ialah perbualan input standard klien AnyConnect yang rosak, bukan kerosakan rangkaian. Anggap log masuk sebagai soal jawab bertulis dan kegagalan menjadi boleh dijangka serta kecil.

Mengapa arahan yang sama gagal dalam skrip

Klien membaca jawapannya daripada input standard, satu baris bagi setiap gesaan, mengikut urutan gateway memintanya. Apa-apa yang mengubah bilangan gesaan, seperti sepanduk baharu, pemilih kumpulan atau cabaran faktor kedua, menggeser setiap jawapan berikutnya satu baris. Klien kemudian membaca nama pengguna di tempat ia menjangka kata laluan dan melaporkan kegagalan yang tidak menunjuk kepada kedua-duanya.

Kata laluan yang mengandungi tanda seru menambah kegagalan kedua yang lebih senyap. Dalam tanda petik berganda, cangkerang mengembangkannya jauh sebelum klien melihat apa-apa.

Letakkan muatan dalam tanda petik tunggal dan aksara itu bergerak utuh. Itulah keseluruhan pembetulan, dan ia menjelaskan seluruh kelas laporan di mana kelayakan yang sama berfungsi apabila ditaip dan gagal apabila disimpan. Periksa apa yang cangkerang lakukan sebelum memeriksa gateway: cetak muatan melalui pembalut yang menunjukkan bait tepat dan kira barisnya. Kebanyakan siasatan seperti ini berakhir di situ.

Tulis jawapan mengikut urutan yang klien minta

Jalankan klien secara interaktif sekali dan catat setiap gesaan mengikut urutan. Pemilih kumpulan hanya muncul apabila gateway menerbitkan beberapa profil, dan gesaan sepanduk hanya muncul apabila satu dikonfigurasikan. Fail jawapan mesti sepadan dengan gateway yang benar-benar anda tuju, bukan yang ada dalam dokumentasi.

Kemudian bina fail dengan jujukan tepat itu, satu jawapan setiap baris. Indeks kumpulan ialah nombor yang klien senaraikan, bukan kedudukan profil dalam dokumen. Terima sepanduk hanya jika gateway anda menghantarnya, dan tambah satu baris bagi setiap soalan tambahan yang diketahui ditanya oleh gateway itu. Mulakan klien dengan bendera bukan interaktif supaya ia menggunakan fail itu dan bukannya menunggu terminal.

connect vpn.lab.example
0
username
password
y
exit
/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txt

Jujukan yang sama boleh datang melalui paip apabila anda lebih suka tidak menyimpan fail pada cakera. Peraturan petikan masih menentukan sama ada ia bertahan.

Jauhkan kelayakan daripada senarai proses

Argumen pada baris arahan boleh dibaca oleh setiap pengguna tempatan sepanjang hayat proses, jadi kata laluan tergolong dalam fail atau paip dan tidak pernah dalam senarai argumen. Jadikan fail itu hanya boleh dibaca oleh akaun yang menjalankan skrip, dan hapuskannya apabila kerja selesai. Pada macOS binari biasanya berada di laluan yang sama seperti Linux, tetapi sahkan lokasi yang dipasang dan bukannya menganggapnya. Pembalut yang menguji kedua-dua laluan lebih pendek daripada laporan insiden.

printf 'username\npassword\ny\n' | /opt/cisco/anyconnect/bin/vpn -s connect vpn.lab.example

Jangan biarkan skrip mencuba semula selama-lamanya juga. Sepanduk yang berubah atau kata laluan yang tamat tempoh semalaman menukar fail jawapan tetap menjadi gelung cubaan semula, dan gelung itulah yang mengunci akaun.

Gagal sekali, cetak teks ralat klien itu sendiri, dan keluar. Kerja berjadual memerlukan semakan identiti dan ketersediaan kelayakan yang sama seperti mana-mana tugas tanpa pengawasan, kerana kelayakan yang tamat tempoh secara senyap tidak dapat dibezakan daripada gangguan pada pukul tiga pagi.

Sahkan sesi sebelum anda mempercayai kod keluar

Keadaan bersambung membuktikan terowong wujud dan tidak lebih daripada itu. Uji satu sumber yang mesti boleh dicapai melaluinya sebelum skrip memulakan kerja sebenar, dan anggap kegagalan di situ sebagai kerosakan yang berbeza daripada log masuk yang gagal. Jika tidak, anda akan mencuba semula sambungan yang sempurna baik yang hanya tidak dapat mencapai destinasinya.

Tanya klien tentang keadaannya sebelum dan selepas pemutusan, kerana sesi lapuk boleh menolak sambungan seterusnya sementara skrip anda melaporkan kejayaan.

/opt/cisco/anyconnect/bin/vpn state
/opt/cisco/anyconnect/bin/vpn disconnect

Rekod output keadaan di sebelah kod keluar, kerana kod sahaja tidak dapat memisahkan log masuk yang ditolak daripada sesi yang tidak pernah ditutup. Apabila gateway menuntut faktor kedua atau kelulusan interaktif, berhenti menulis langkah itu sebagai skrip dan gunakan mekanisme yang disokong klien. Fail jawapan tetap ialah kemudahan untuk kelayakan yang anda kawal, bukan cara memintas langkah pengesahan yang tidak anda kawal. Kekalkan skop sesempit itu dan ini kekal sebagai skrip pendek.

Bila fail jawapan tetap ialah alat yang salah

Faktor kedua atau gesaan kelulusan mengalahkan corak ini sepenuhnya, dan itu sempadan reka bentuk, bukan teka-teki skrip. Gunakan apa-apa mekanisme yang disokong klien untuk langkah itu dan bukannya meneka jawapan terlebih dahulu. Fail tetap hanya berfungsi untuk kelayakan yang kekal sama antara larian.

Dua gaya kelayakan lama juga disalah anggap sebagai AnyConnect. Profil vpnc bercakap protokol lain, dan ia mahu nama kumpulan sebagai pengecam IPSec, kemudian rahsia kumpulan bersama, kemudian butiran akaun anda sendiri.

Oleh sebab protokol berbeza, vpnc tidak dapat mencapai gateway yang hanya menerbitkan profil AnyConnect, dan alternatif terbuka biasa untuk perkhidmatan itu ialah openconnect dengan protokol anyconnect dipilih. Fail pcf milik klien Cisco lama, dan walaupun hos, nama kumpulan dan kata laluan kumpulannya boleh dimasukkan semula dalam klien yang masih bercakap Cisco IPsec, fail itu tidak berpindah antara klien. Port luar biasa atau mod terowong tidak standard biasanya hilang dalam perpindahan itu. Tentukan protokol mana yang ditawarkan gateway sebelum memilih alat.

Artikel berkaitan