Дөрвөн мөр бүхий here-баримт нь бүрэн интерактив бус нэвтрэлт гэсэн итгэл байдаг бөгөөд гарц хоёр бүлэг санал болгох, баннер хэвлэх, эсвэл нууц үгийн дараа токен асуух хүртэл тэр итгэл тогтоно. Тэгэхэд мөнөөх скрипт нууц үгийг тоо хүлээж байсан цэсэнд бичнэ. Linux дээрх командын мөрийн клиентийг скриптжүүлж болно, гэхдээ зааварт таамагласан зүйлийг биш, түүний үнэхээр хүлээж байгаа зүйлийг өгсөн тохиолдолд л.

Тогтмол here-баримт бол домог

Cisco-гийн Linux клиент /opt/cisco/anyconnect/bin/vpn замд жижиг програмыг суулгадаг бөгөөд Secure Client 5 үүнийг одоо ч нийлүүлдэг. vpnagentd үйлчилгээ ажиллаж байх үед -s туг клиентийн асуух дарааллаар стандарт оролтоос хариулт уншина. Тэр дараалал серверүүдийн хооронд тогтмол биш.

Бүлгийн цэс нэг мөр нэмнэ. Нэвтрэх баннер өөр нэгийг нэмнэ. Нууц үгийн дараах токен хүсэлт дөрвөн мөрийн скриптийг бүрмөсөн эвддэг, учир нь тавдугаар мөр хэзээ ч токен байх ёсгүй байсан. Алдаа чимээгүй: клиент буруу мөр хүлээн авч, холбогдох оролдлого дуусч, скрипт ямар ч хэрэгтэй зүйл мэдээлэхгүй.

Клиентийг ижил гарц, хувилбар руу нэг удаа гараар ажиллуулж, асуултуудыг гарч буй дарааллаар нь бич. Тэр бичлэг бол таны скриптийн биелүүлэх ёстой тодорхойлолт юм.

Клиент юу хүлээж байна

Нэг бүлэгтэй нийтлэг тохиолдолд дараалал нь хэрэглэгчийн нэр, нууц үг, заримдаа баннерын баталгаажуулалт байна. here-баримтын эхний мөр нь сервер үнэхээр цэс харуулж байж л цэсийн индекс болдог, тиймээс нэг скрипт нэг газар ажиллаж, дараагийн газар бүтэлгүйтдэг.

/opt/cisco/anyconnect/bin/vpn -s connect vpn.example.net <<EOF
0
alice
$VPN_PASSWORD
y
EOF

Үүнийг тогтмол протокол биш, дөрвөн боломжит асуултад өгөх дөрвөн хариулт гэж унш. Тэг нь цэсийн сонголт, нууц үг биш бөгөөд төгсгөлийн y нь олон гарцын хэзээ ч илгээдэггүй баннерыг хүлээн авна.

Дараалал урьдчилан таамаглах боломжгүй үед expect ашигла

Асуултын дараалал өөрчлөгдөх үед мөр тоолохоо болиод оронд нь асуултыг хүлээ. Expect скрипт connect командыг эхлүүлж, хэрэглэгчийн нэрийн асуултыг хүлээж илгээж, нууц үгийн асуултыг хүлээж илгээгээд, дараа нь холбогдсон төлвийг хүлээнэ. Хүлээлт бүр өөрийн хугацааны хязгаартай.

Хугацааны хязгаарыг алдаа гэж үзээд гар. Гэнэтийн асуултын дараа оролтоо үргэлжлүүлэн илгээж байгаа скрипт нууц үгийг бүрхүүл, цэс эсвэл санамсаргүйгээр уншиж байгаа юу ч байсан тэнд таатай бичнэ. Нэвтрэх скрипт ингэж осол болдог.

Expect нь нууцыг хасан бүртгэж болох бичлэгийг бас өгдөг бөгөөд шинэчлэлтийн дараа гарц асуултаа өөрчлөх үед энэ нь гарах кодоос илүү үнэ цэнэтэй.

Нууц хаа нэгтээ амьдрах ёстой

Энэ асуудлын хувилбар бүр нэг сул талтай: нууц үг клиентийн уншиж чадах хэлбэрээр байх ёстой. Үүнийг аргумент болгон дамжуулах нь процессын хүснэгтэд ил болгоно. Дамжуулах хоолойгоор гүйлгэх нь ихэвчлэн бүрхүүлийн түүхэнд оруулна. Хоёулаа хуваалцсан үсрэлтийн хост дээрх бусад локал хэрэглэгчдэд уншигдана.

install -m 600 /dev/null ~/.vpn-secret
umask 077; VPN_PASSWORD=$(cat ~/.vpn-secret) /opt/cisco/anyconnect/bin/vpn -s connect vpn.example.net

Бүртгэлийн эзэмшлийн 600 горимтой файл нь доод хязгаар бөгөөд энэ нь диск дээр энгийн текст нууц хэвээр. secret-tool lookup нь Linux түлхүүрийн цагиргаас уншдаг бол macOS дээр мөн ажлыг security find-generic-password -w хийдэг. Байгууллага гэрчилгээ эсвэл SAML баталгаажуулалтыг дэмждэг газарт түүнд давуу эрх өг, учир нь хадгалсан нууц үг дээр нэмсэн MFA ч хүнгүйгээр нэвтрэлтийг гүйцээж чадахгүй.

Тунелийг баталгаажуул, дараа нь салгалтыг өөрөө хариуц

Алдааны текст байхгүй байхыг бүү итгэ. Клиентээс төлвийг нь асууж, интерфейсийг бие даан шалга:

/opt/cisco/anyconnect/bin/vpn state
ip -brief address

Төлөв нь Connected гэж уншигдах ёстой бөгөөд тунелийн интерфейс хаягтай байх ёстой. Дараа нь тунель хүрэх ёстой нэг нөөцийг хүс, учир нь замгүй холбогдсон төлөв бол бодит үр дүн бөгөөд амархан анзаарагдахгүй.

vpn disconnect-оор салж, тунелийг эхлүүлсэн скрипт салгалтыг хариуцаг. Сессийг нээлттэй үлдээсэн бүтэлгүй ажил лицензийн суудал идэж, дараагийн оролдогчид баталгаажуулалтын асуудал мэт харагдана.

Ажлын дараалал: vpnagentd-г баталгаажуул, бодит асуултын дарааллыг тэмдэглэ, here-баримт эсвэл expect-ийг сонго, нууцыг argv болон түүхээс гадуур байлга, төлөв болон нэг нөөцийг шалга, дараа нь мөнөөх скрипт дээр сал.

Холбоотой нийтлэлүүд