AnyConnect di Linux: menulis skrip urutan log masuk dengan selamat
Binari vpn Cisco AnyConnect membaca jawapan daripada stdin, dan itu cukup untuk log masuk yang boleh diulang. Bina urutannya, lindungi failnya, sahkan dan berhenti.
Klien vpn yang disertakan dengan Cisco AnyConnect berkelakuan seperti perbualan: ia mencetak gesaan, menunggu satu baris, kemudian mencetak yang seterusnya. Suapkan perbualan itu daripada fail atau paip dan binari yang sama berjalan tanpa pengawasan. Tekniknya ialah satu ubah hala tambah senarai jawapan tersusun, dan senarailah, bukan ubah hala, yang menentukan sama ada skrip boleh dipercayai.
Dua perkara merosakkannya dalam amalan. Urutan gesaan berubah apabila gateway bertanya sesuatu tambahan, dan kata laluan yang disimpan menukar satu salah taip menjadi kunci akaun. Layan urutan itu sebagai data berversi yang boleh anda bandingkan selepas setiap perubahan gateway. Gagal dengan lantang dan bukannya cuba semula, kerana gelung ialah cara kata laluan yang tersalah taip menjadi akaun terkunci.
Satu urutan, dalam susunan yang klien tanyakan
Jalankan klien secara interaktif sekali dan catat setiap gesaan dalam susunan ia muncul. Transkrip itu menjadi fail jawapan. Apabila anda mengubah hala fail ke dalam binari, baris pertama mesti menjadi arahan sambungan itu sendiri, sebab itulah urutan bermula dengan nama hos dan bukan nama pengguna.
connect vpn.example.com
0
<username>
<password>
y
exit
0 kosong memilih profil sambungan pertama apabila gateway menawarkan senarai; gunakan indeks yang dicetak oleh gateway anda. y menerima sepanduk log masuk, jadi padam baris itu jika tiada sepanduk dan sisipkan satu di tempat gateway anda bertanya soalan tambahan. exit di hujung membolehkan klien tamat dengan bersih apabila jawapan terakhir telah digunakan.
/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txt
Mod bukan interaktif di sini bukan pilihan. Tanpa -s klien boleh mengambil alih terminal dan mengabaikan input yang dialihkan; dengannya jawapan dibaca daripada aliran dan proses kembali. Di tempat binari memerlukan keistimewaan tinggi, balut panggilan dalam sudo -n supaya skrip gagal serta-merta dan bukannya tersekat pada gesaan kata laluan.
Di mana fail jawapan bocor
Fail yang mengandungi kata laluan ialah kelayakan, jadi berikan hak kelayakan: mod 600, dimiliki akaun yang menjalankan kerja, dan tidak pernah di dalam direktori kongsi atau disegerakkan. Cipta dengan mod yang sudah digunakan dan bukannya membetulkannya kemudian, kerana fail sebentar boleh dibaca oleh semua antara penulisan dan chmod.
install -m 600 /dev/null ~/.config/anyconnect.txt
chmod 700 ~/.config
Separuh lagi ialah argv. Kata laluan yang dihantar sebagai argumen kelihatan kepada setiap pengguna tempatan yang menyenaraikan proses, dan ia juga masuk ke sejarah shell. Baca daripada deskriptor fail atau pemboleh ubah persekitaran sebaliknya, dan letakkan muatan dalam tanda petik supaya shell tidak boleh mengembangkan apa-apa di dalamnya.
printf '%s\n' 'connect vpn.example.com' '0' "$VPN_USER" "$VPN_PASS" 'y' 'exit' \
| sudo -n /opt/cisco/anyconnect/bin/vpn -s
Perhatikan tanda petik. Di dalam tanda petik berganda, kata laluan yang mengandungi ! boleh dikembangkan oleh shell interaktif sebelum klien melihatnya, dan kegagalan datang sebagai ralat event-not-found generik yang kelihatan seperti masalah protokol.
Buktikan terowong, kemudian tutupnya
Keadaan bersambung hanya membuktikan klien percaya ia mempunyai sesi. Pilih hos yang hanya menjawab dari dalam rangkaian korporat dan ujinya sekali sebelum melakukan apa-apa lagi. Kegagalan di situ ialah kerosakan penghalaan atau dasar, dan menjalankan log masuk semula tidak akan mengubahnya.
/opt/cisco/anyconnect/bin/vpn state
curl -sS -o /dev/null -w '%{http_code}\n' --max-time 10 https://<internal-host>/
/opt/cisco/anyconnect/bin/vpn disconnect
Semak output keadaan sebelum dan selepas pemutusan. Klien yang ditinggalkan dengan sesi lama boleh menolak sambungan seterusnya sementara skrip masih melaporkan kejayaan, dan mod kegagalan itu tidak kelihatan jika anda hanya melihat kod keluar. Bandingkan kedua-dua bacaan dan bukannya mempercayai yang kedua semata-mata. Alias dalam profil shell cukup untuk kegunaan harian, manakala apa-apa yang dijadualkan berhak mendapat semakan kelayakan dan identiti yang sama seperti mana-mana kerja tanpa pengawasan.
Apabila senarai tetap tidak lagi selamat
Fail jawapan mengekod urutan gesaan hari ini. Sepanduk yang berubah, perubahan kata laluan paksa atau cabaran faktor kedua menjadikannya gelung yang boleh mengunci akaun, sebab itu skrip mesti keluar pada jawapan tidak dijangka pertama dan bukannya memulakan semula.
Tangkap apa yang dicetak klien, kembalikan status bukan sifar dan biarkan pemanggil memutuskan. Di tempat gateway menuntut faktor kedua, jawapan jujurnya ialah log masuk tanpa pengawasan tidak tersedia untuk profil itu, bukan bahawa urutan itu perlukan satu baris lagi.
Putaran juga termasuk dalam semakan yang sama. Jika kelayakan disimpan, putuskan siapa yang boleh membacanya, bila ia berubah dan apa yang membuangnya apabila hos dibina semula. Skrip yang berfungsi setahun kerana tiada siapa menyentuh kata laluan bukan reka bentuk, tetapi kemalangan yang menunggu dasar putaran.
Profil yang bukan AnyConnect
Dua gaya kelayakan Cisco yang lebih lama dikelirukan dengan yang ini. Profil vpnc meminta IPSec ID, yang sebenarnya nama kumpulan, kemudian rahsia kumpulan, kemudian kelayakan anda sendiri, dan ketiga-tiganya datang daripada sesiapa yang menjalankan gateway. Cisco IPsec lama ialah protokol berbeza daripada AnyConnect, jadi vpnc tidak boleh mencapai perkhidmatan khusus AnyConnect; openconnect --protocol=anyconnect ialah klien terbuka untuk kerja itu.
Fail .pcf menerangkan profil klien lama. Hos, nama kumpulan dan kata laluan kumpulan di dalamnya boleh dimasukkan semula secara manual dalam klien yang bertutur Cisco IPsec, walaupun fail itu bukan import universal dan mana-mana port atau mod terowong bukan lalai biasanya hilang dalam pemindahan.
Mulakan dengan apa yang gateway benar-benar tawarkan, kemudian pilih klien yang bertutur protokol itu. Menyalin profil dari tapak lain ialah cara orang akhirnya menyahpepijat kelayakan yang tidak pernah menjadi masalah.