Log masuk Cisco Secure Client dari cangkerang Linux tanpa GUI
Dokumen here bukan protokol log masuk. Rakam susunan gesaan sebenar, gunakan expect apabila ia berubah, dan pastikan kata laluan di luar argv dan sejarah.
Kepercayaan itu ialah dokumen here dengan empat baris merupakan log masuk tidak interaktif yang lengkap, dan ia bertahan sehingga gerbang menawarkan dua kumpulan, mencetak sepanduk, atau meminta token selepas kata laluan. Ketika itu skrip yang sama menaip kata laluan ke dalam menu yang menjangka nombor. Klien baris arahan pada Linux boleh diskripkan, tetapi hanya jika anda memberinya apa yang benar-benar ditunggunya, bukan apa yang diandaikan tutorial.
Dokumen here tetap itu ialah mitos
Klien Linux Cisco memasang program kecil di /opt/cisco/anyconnect/bin/vpn, dan Secure Client 5 masih menyediakannya. Selagi perkhidmatan vpnagentd berjalan, bendera -s membaca jawapan daripada input standard mengikut susunan yang klien minta. Susunan itu tidak tetap antara pelayan.
Menu kumpulan menambah satu baris. Sepanduk log masuk menambah satu lagi. Gesaan token selepas kata laluan mematahkan skrip empat baris sepenuhnya, kerana baris kelima tidak pernah akan menjadi token. Kegagalan itu senyap: klien menerima rentetan yang salah, percubaan sambungan tamat, dan skrip tidak melaporkan apa-apa yang berguna.
Jalankan klien secara manual sekali terhadap gerbang dan versi yang sama, dan tuliskan gesaan mengikut susunan kemunculannya. Transkrip itu ialah spesifikasi yang skrip anda mesti patuhi.
Apa yang ditunggu oleh klien
Dalam kes satu kumpulan yang biasa, urutannya ialah nama pengguna, kata laluan dan kadangkala pengesahan sepanduk. Baris pertama dokumen here hanya menjadi indeks menu apabila pelayan benar-benar memaparkan menu, sebab itulah skrip yang sama berfungsi di satu tapak dan gagal di tapak berikutnya.
/opt/cisco/anyconnect/bin/vpn -s connect vpn.example.net <<EOF
0
alice
$VPN_PASSWORD
y
EOF
Baca itu sebagai empat jawapan kepada empat soalan yang mungkin, bukan sebagai protokol tetap. Sifar ialah pilihan menu, bukan kata laluan, dan y di hujung menerima sepanduk yang banyak gerbang tidak pernah hantar.
Gunakan expect apabila susunan tidak dapat diramal
Apabila susunan gesaan berubah, berhenti mengira baris dan tunggu gesaan itu sebaliknya. Skrip expect memulakan arahan connect, menunggu gesaan nama pengguna, menghantar, menunggu gesaan kata laluan, menghantar, dan kemudian menunggu keadaan bersambung. Setiap penantian mempunyai tamat masanya sendiri.
Anggap tamat masa sebagai kegagalan dan keluar. Skrip yang terus menghantar input selepas gesaan yang tidak dijangka akan dengan senang hati menaip kata laluan ke dalam cangkerang, menu atau apa-apa sahaja yang kebetulan membaca. Begitulah skrip log masuk menjadi insiden.
Expect juga memberi anda transkrip yang boleh dilog dengan rahsia dibuang, dan itu lebih bernilai daripada kod keluar apabila gerbang menukar gesaannya selepas peningkatan.
Rahsia mesti tinggal di suatu tempat
Setiap versi masalah ini berkongsi satu kelemahan: kata laluan mesti wujud dalam bentuk yang boleh dibaca oleh klien. Menghantarnya sebagai argumen mendedahkannya dalam jadual proses. Menggemakannya melalui paip selalunya meletakkannya dalam sejarah cangkerang. Kedua-duanya boleh dibaca oleh pengguna tempatan lain pada hos lompat yang dikongsi.
install -m 600 /dev/null ~/.vpn-secret
umask 077; VPN_PASSWORD=$(cat ~/.vpn-secret) /opt/cisco/anyconnect/bin/vpn -s connect vpn.example.net
Fail dengan mod 600 milik akaun ialah minimum, dan ia masih rahsia teks biasa pada cakera. secret-tool lookup membaca daripada gegelang kunci Linux, dan pada macOS kerja yang sama dilakukan oleh security find-generic-password -w. Di tempat organisasi menyokong pengesahan sijil atau SAML, utamakan itu, kerana kata laluan tersimpan tambah MFA masih tidak boleh melengkapkan log masuk tanpa manusia.
Sahkan terowong, kemudian ambil alih pemutusan
Jangan percaya ketiadaan teks ralat. Tanya klien tentang keadaannya dan periksa antara muka secara berasingan:
/opt/cisco/anyconnect/bin/vpn state
ip -brief address
Keadaan itu sepatutnya membaca Connected, dan antara muka terowong sepatutnya mempunyai alamat. Kemudian minta satu sumber yang sepatutnya dicapai oleh terowong, kerana keadaan bersambung tanpa laluan ialah hasil sebenar dan mudah terlepas pandang.
Putuskan dengan vpn disconnect, dan biarkan skrip yang memulakan terowong mengambil alih pemutusan. Kerja yang gagal dan membiarkan sesi terbuka memakan tempat lesen dan kelihatan seperti masalah pengesahan kepada orang seterusnya yang mencuba.
Urutan kerja: sahkan vpnagentd, rakam susunan gesaan sebenar, pilih dokumen here atau expect, pastikan rahsia di luar argv dan sejarah, sahkan keadaan dan satu sumber, kemudian putuskan dalam skrip yang sama.