Skrip keluar dengan nol, terowongan muncul, dan jalankan berikutnya ditolak sebelum sempat meminta kata sandi. Atau perintah yang sama bekerja di terminal dan gagal dari tugas terjadwal dengan galat «peristiwa tidak ditemukan» yang tidak menyebut apa pun yang berguna. Keduanya adalah percakapan masukan standar klien AnyConnect yang kacau, bukan gangguan jaringan. Perlakukan login sebagai tanya jawab tertulis dan kegagalannya menjadi terduga dan kecil.

Mengapa perintah yang sama gagal di dalam skrip

Klien membaca jawabannya dari masukan standar, satu baris per perintah, dalam urutan yang diminta gateway. Apa pun yang mengubah jumlah perintah, seperti spanduk baru, pemilih grup, atau tantangan faktor kedua, menggeser setiap jawaban berikutnya satu baris. Klien lalu membaca nama pengguna di tempat yang diharapkan kata sandi dan melaporkan kegagalan yang tidak menunjuk ke keduanya.

Kata sandi yang berisi tanda seru menambah kegagalan kedua yang lebih senyap. Di dalam tanda kutip ganda shell mengembangkannya jauh sebelum klien melihat apa pun.

Letakkan muatan di dalam tanda kutip tunggal dan karakternya berjalan utuh. Itulah seluruh perbaikannya, dan itu menjelaskan satu kelas laporan di mana kredensial yang sama bekerja saat diketik dan gagal saat disimpan. Periksa apa yang dilakukan shell sebelum memeriksa gateway: cetak muatan lewat pembungkus yang menunjukkan bita persisnya dan hitung barisnya. Sebagian besar penyelidikan seperti ini berakhir di situ.

Tulis jawaban dalam urutan yang diminta klien

Jalankan klien secara interaktif sekali dan catat setiap perintah berurutan. Pemilih grup hanya muncul saat gateway menerbitkan beberapa profil, dan perintah spanduk hanya muncul saat ada yang dikonfigurasi. Berkas jawaban harus cocok dengan gateway yang benar-benar Anda tuju, bukan yang ada di dokumentasi.

Lalu susun berkas dengan urutan persis itu, satu jawaban per baris. Indeks grup adalah nomor yang dicantumkan klien, bukan posisi profil dalam dokumen. Terima spanduk hanya jika gateway Anda mengirimkannya, dan tambahkan baris untuk setiap pertanyaan tambahan yang diketahui diajukan gateway itu. Jalankan klien dengan bendera noninteraktif agar ia mengonsumsi berkas alih-alih menunggu terminal.

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

Urutan yang sama bisa datang lewat pipa bila Anda lebih suka tidak menyimpan berkas di disk. Aturan pengutipan tetap menentukan apakah ia bertahan.

Jauhkan kredensial dari daftar proses

Argumen di baris perintah dapat dibaca setiap pengguna lokal sepanjang umur proses, jadi kata sandi berada di berkas atau pipa dan tidak pernah di daftar argumen. Buat berkas itu hanya dapat dibaca oleh akun yang menjalankan skrip, dan hapus saat tugas selesai. Di macOS biner biasanya berada di jalur yang sama seperti di Linux, tetapi pastikan lokasi terpasang alih-alih menganggapnya. Pembungkus yang memeriksa kedua jalur lebih pendek daripada laporan insiden.

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

Jangan biarkan skrip mencoba ulang selamanya juga. Spanduk yang berubah atau kata sandi yang kedaluwarsa semalam mengubah berkas jawaban tetap menjadi gelung coba ulang, dan gelung itulah yang mengunci akun.

Gagal sekali, cetak teks galat klien itu sendiri, dan keluar. Tugas terjadwal memerlukan tinjauan identitas dan ketersediaan kredensial yang sama seperti tugas tak terawasi lainnya, karena kredensial yang kedaluwarsa diam-diam tidak dapat dibedakan dari pemadaman pukul tiga pagi.

Pastikan sesi sebelum memercayai kode keluar

Status terhubung membuktikan terowongan ada dan tidak lebih dari itu. Uji satu sumber daya yang harus dapat dijangkau melaluinya sebelum skrip memulai pekerjaan nyata, dan perlakukan kegagalan di sana sebagai gangguan yang berbeda dari login gagal. Jika tidak, Anda akan mencoba ulang koneksi yang sepenuhnya baik yang sekadar tidak dapat mencapai tujuannya.

Tanyakan status klien sebelum dan sesudah pemutusan, karena sesi basi dapat menolak sambungan berikutnya sementara skrip Anda melaporkan keberhasilan.

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

Catat keluaran status di samping kode keluar, karena kode saja tidak dapat memisahkan login yang ditolak dari sesi yang tidak pernah ditutup. Saat gateway menuntut faktor kedua atau persetujuan interaktif, berhenti menuliskan langkah itu sebagai skrip dan gunakan mekanisme yang didukung klien. Berkas jawaban tetap adalah kemudahan untuk kredensial yang Anda kendalikan, bukan cara melewati langkah autentikasi yang tidak Anda kendalikan. Jaga cakupannya sesempit itu dan ini tetap menjadi skrip pendek.

Kapan berkas jawaban tetap adalah alat yang salah

Faktor kedua atau perintah persetujuan mengalahkan pola ini sepenuhnya, dan itu batas desain, bukan teka-teki skrip. Gunakan mekanisme apa pun yang didukung klien untuk langkah itu alih-alih menebak jawabannya sebelumnya. Berkas tetap hanya bekerja untuk kredensial yang tetap sama antarjalankan.

Dua gaya kredensial lama juga dikelirukan dengan AnyConnect. Profil vpnc berbicara protokol lain, dan ia menginginkan nama grup sebagai pengenal IPSec, lalu rahasia grup bersama, lalu detail akun Anda sendiri.

Karena protokolnya berbeda, vpnc tidak dapat mencapai gateway yang hanya menerbitkan profil AnyConnect, dan alternatif terbuka yang lazim untuk layanan itu adalah openconnect dengan protokol anyconnect dipilih. Berkas pcf milik klien Cisco lama, dan meskipun hos, nama grup, dan kata sandi grupnya dapat dimasukkan lagi di klien yang masih berbicara Cisco IPsec, berkas itu tidak berpindah antar-klien. Port tak biasa atau mode terowongan nonstandar biasanya hilang dalam perpindahan itu. Putuskan protokol mana yang ditawarkan gateway sebelum memilih alat.

Artikel terkait