Cisco Secure Client’e Linux kabuğundan GUI olmadan giriş
here-document bir giriş protokolü değildir. Gerçek istem sırasını kaydedin, değiştiğinde expect kullanın ve parolayı argv ile geçmişin dışında tutun.
İnanç, dört satırlık bir here-document’ın eksiksiz ve etkileşimsiz bir giriş olduğudur ve bu, ağ geçidi iki grup sunduğunda, bir banner bastığında ya da paroladan sonra token istediğinde sona erer. O anda aynı betik parolayı sayı bekleyen bir menüye yazar. Linux’taki komut satırı istemcisi betiklenebilir, ancak ona eğitimin varsaydığını değil, gerçekten beklediğini verirseniz.
Sabit here-document bir efsanedir
Cisco’nun Linux istemcisi /opt/cisco/anyconnect/bin/vpn konumuna küçük bir program kurar ve Secure Client 5 bunu hâlâ gönderir. vpnagentd hizmeti çalışırken -s bayrağı yanıtları istemcinin istediği sırayla standart girdiden okur. Bu sıra sunucular arasında sabit değildir.
Grup menüsü bir satır ekler. Giriş banner’ı bir tane daha ekler. Paroladan sonra gelen token istemi dört satırlık betiği tamamen bozar, çünkü beşinci satır hiçbir zaman token olmayacaktı. Hata sessizdir: istemci yanlış dizeyi alır, bağlantı denemesi biter ve betik işe yarar hiçbir şey bildirmez.
İstemciyi aynı ağ geçidine ve sürüme karşı bir kez elle çalıştırın ve istemleri göründükleri sırayla yazın. O döküm, betiğinizin karşılaması gereken şartnamedir.
İstemci neyi bekliyor
Yaygın tek grup durumunda sıra kullanıcı adı, parola ve bazen bir banner onayıdır. Bir here-document’ın ilk satırı yalnızca sunucu gerçekten bir menü sunduğunda menü dizini olur, bu yüzden aynı betik bir yerde çalışır ve diğerinde başarısız olur.
/opt/cisco/anyconnect/bin/vpn -s connect vpn.example.net <<EOF
0
alice
$VPN_PASSWORD
y
EOF
Bunu sabit bir protokol değil, dört olası soruya dört yanıt olarak okuyun. Sıfır bir menü seçimidir, parola değildir ve sondaki y birçok ağ geçidinin hiç göndermediği bir banner’ı kabul eder.
Sıra öngörülemediğinde expect kullanın
İstem sırası değiştiğinde satır saymayı bırakın ve bunun yerine istemi bekleyin. Bir expect betiği connect komutunu başlatır, kullanıcı adı istemini bekler, gönderir, parola istemini bekler, gönderir ve ardından bağlı durumu bekler. Her beklemenin kendi zaman aşımı vardır.
Zaman aşımını başarısızlık sayın ve çıkın. Beklenmeyen bir istemden sonra girdi göndermeye devam eden bir betik parolayı memnuniyetle bir kabuğa, menüye ya da o sırada okuyan ne varsa ona yazar. Bir giriş betiği böylece olaya dönüşür.
Expect ayrıca sırrı çıkarılmış olarak kaydedebileceğiniz bir döküm verir ve bir ağ geçidi yükseltmeden sonra istemlerini değiştirdiğinde bu, çıkış kodundan daha değerlidir.
Sır bir yerde yaşamak zorunda
Bu sorunun her sürümü tek bir zayıflığı paylaşır: parola, istemcinin okuyabileceği bir biçimde var olmalıdır. Onu argüman olarak geçirmek süreç tablosunda açığa çıkarır. Bir boru hattından yansıtmak çoğu zaman onu kabuk geçmişine koyar. İkisi de paylaşılan bir atlama sunucusundaki diğer yerel kullanıcılar tarafından okunabilir.
install -m 600 /dev/null ~/.vpn-secret
umask 077; VPN_PASSWORD=$(cat ~/.vpn-secret) /opt/cisco/anyconnect/bin/vpn -s connect vpn.example.net
Hesaba ait 600 izinli bir dosya asgari düzeydir ve yine de diskte düz metin bir sırdır. secret-tool lookup Linux anahtarlığından okur, macOS’te aynı işi security find-generic-password -w yapar. Kuruluşun sertifika veya SAML kimlik doğrulamasını desteklediği yerlerde onu tercih edin, çünkü saklanan parola artı MFA hâlâ bir insan olmadan girişi tamamlayamaz.
Tüneli doğrulayın, sonra bağlantı kesmeyi üstlenin
Hata metninin yokluğuna güvenmeyin. İstemciye durumunu sorun ve arayüzü bağımsız olarak denetleyin:
/opt/cisco/anyconnect/bin/vpn state
ip -brief address
Durum Connected okumalı ve tünel arayüzünde bir adres bulunmalıdır. Ardından tünelin ulaşması gereken tek bir kaynak isteyin, çünkü yolu olmayan bağlı bir durum gerçek bir sonuçtur ve gözden kaçırması kolaydır.
vpn disconnect ile bağlantıyı kesin ve tüneli başlatan betiğin bağlantı kesmeyi üstlenmesine izin verin. Oturumu açık bırakan başarısız bir iş bir lisans yeri tüketir ve sıradaki deneyene kimlik doğrulama sorunu gibi görünür.
İş sırası: vpnagentd’yi doğrulayın, gerçek istem sırasını kaydedin, here-document veya expect seçin, sırrı argv ve geçmişin dışında tutun, durumu ve tek bir kaynağı doğrulayın, sonra aynı betikte bağlantıyı kesin.