Кліент vpn, які пастаўляецца з Cisco AnyConnect, паводзіць сябе як размова: ён друкуе запыт, чакае радок, затым друкуе наступны. Падайце гэтую размову з файла або трубы, і той жа бінарнік працуе без нагляду. Тэхніка — гэта адно перанакіраванне плюс упарадкаваны спіс адказаў, і менавіта спіс, а не перанакіраванне, вырашае, ці будзе скрыпт надзейным.

На практыцы гэта ламаюць дзве рэчы. Парадак запытаў змяняецца, калі шлюз пытае нешта дадатковае, а захаваны пароль ператварае адну друкарскую памылку ў блакіроўку ўліковага запісу. Стаўцеся да паслядоўнасці як да версіянаваных даных, якія можна параўнаць пасля любой змены шлюза. Правальвайцеся гучна замест паўтораў, бо цыкл — гэта менавіта тое, як няправільна набраны пароль робіцца заблакаваным уліковым запісам.

Адна паслядоўнасць, у тым парадку, у якім просіць кліент

Запусціце кліент інтэрактыўна адзін раз і запішыце кожны запыт у тым парадку, у якім ён з'яўляецца. Гэты транскрыпт становіцца файлам адказаў. Калі вы перанакіроўваеце файл у бінарнік, першы радок павінен быць самой камандай злучэння, таму паслядоўнасць пачынаецца з імя хоста, а не з імя карыстальніка.

connect vpn.example.com
0
<username>
<password>
y
exit

Голы 0 выбірае першы профіль злучэння, калі шлюз прапануе спіс; выкарыстоўвайце індэкс, які друкуе ваш шлюз. y прымае банер уваходу, таму выдаліце гэты радок, калі банера няма, і ўстаўце радок там, дзе ваш шлюз задае дадатковае пытанне. exit у канцы дазваляе кліенту чыста завяршыцца, калі апошні адказ спажыты.

/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txt

Неінтэрактыўны рэжым тут не апцыянальны. Без -s кліент можа захапіць тэрмінал і ігнараваць перанакіраваны ўвод; з ім адказы чытаюцца з патоку, і працэс вяртаецца. Там, дзе бінарніку патрэбныя павышаныя прывілеі, абгарніце выклік у sudo -n, каб скрыпт імгненна правальваўся, а не блакіраваўся на запыце пароля.

Дзе файл адказаў працякае

Файл, які змяшчае пароль, — гэта ўліковыя даныя, таму дайце яму правы як уліковым даным: рэжым 600, уласнік — уліковы запіс, які выконвае задачу, і ніколі ў агульнай або сінхранізаванай тэчцы. Стварыце яго з ужо ўжытымі правамі, а не выпраўляйце потым, бо файл на імгненне даступны для чытання ўсім паміж запісам і chmod.

install -m 600 /dev/null ~/.config/anyconnect.txt
chmod 700 ~/.config

Другая палова — argv. Пароль, перададзены як аргумент, бачны кожнаму лакальнаму карыстальніку, які пералічвае працэсы, і ён таксама трапляе ў гісторыю абалонкі. Чытайце яго з дэскрыптара файла або зменнай асяроддзя, і бярыце карысную нагрузку ў лапкі, каб абалонка не магла нічога ўнутры раскрыць.

printf '%s\n' 'connect vpn.example.com' '0' "$VPN_USER" "$VPN_PASS" 'y' 'exit' \
  | sudo -n /opt/cisco/anyconnect/bin/vpn -s

Сачыце за лапкамі. Унутры двайных лапок пароль, які змяшчае !, можа быць раскрыты інтэрактыўнай абалонкай перш, чым кліент яго ўбачыць, і збой прыходзіць як агульная памылка event-not-found, якая выглядае як праблема пратаколу.

Давядзіце тунель, потым зачыніце яго

Стан злучэння даказвае толькі тое, што кліент лічыць, што ў яго ёсць сеанс. Выберыце хост, які адказвае толькі знутры карпаратыўнай сеткі, і праверце яго адзін раз, перш чым рабіць што-небудзь іншае. Збой там — гэта збой маршрутызацыі або палітыкі, і паўторны запуск уваходу гэтага не зменіць.

/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

Праверце вывад стану да і пасля адключэння. Кліент, пакінуты са састарэлым сеансам, можа адхіліць наступнае злучэнне, пакуль скрыпт усё яшчэ паведамляе пра поспех, і гэты рэжым збою нябачны, калі глядзець толькі на коды выхаду. Параўнайце два чытанні, а не давярайце другому асобна. Аліясы ў профілі абалонкі дастатковыя для штодзённага выкарыстання, а вось усё запланаванае заслугоўвае таго ж агляду ўліковых даных і ідэнтычнасці, як любая іншая задача без нагляду.

Калі фіксаваны спіс перастае быць бяспечным

Файл адказаў кадуе сённяшні парадак запытаў. Зменены банер, прымусовая змена пароля або выклік другога фактара ператварае яго ў цыкл, які можа заблакаваць уліковы запіс, таму скрыпт павінен выходзіць на першым нечаканым адказе, а не перазапускацца.

Захапіце тое, што друкаваў кліент, вярніце не-нулявы статус і дайце вырашыць выклікаючаму. Там, дзе шлюз патрабуе другі фактар, сумленны адказ: уваход без нагляду для гэтага профілю недаступны, а не тое, што паслядоўнасці патрэбен яшчэ адзін радок.

Ратацыя належыць да таго ж агляду. Калі ўліковыя даныя захоўваюцца, вырашыце, хто можа іх чытаць, калі яны змяняюцца і што выдаляе іх пры перабудове хоста. Скрыпт, які працуе год, бо ніхто не кранаў пароль, — гэта не дызайн, а аварыя, што чакае палітыкі ратацыі.

Профілі, якія не AnyConnect

Два старыя стылі ўліковых даных Cisco блытаюць з гэтым. Профіль vpnc пытае IPSec ID, што насамрэч з'яўляецца імем групы, потым сакрэт групы, потым вашыя ўласныя ўліковыя даныя, і ўсе тры бяруцца ў таго, хто кіруе шлюзам. Састарэлы Cisco IPsec — іншы пратакол, чым AnyConnect, таму vpnc не можа дасягнуць сэрвісу толькі для AnyConnect; openconnect --protocol=anyconnect — гэта адкрыты кліент для гэтай задачы.

Файл .pcf апісвае профіль старога кліента. Хост, імя групы і пароль групы ўнутры можна паўторна ўвесці ўручную ў кліенце, які размаўляе на Cisco IPsec, хоць файл не ўніверсальны імпарт і любы нестандартны порт або рэжым тунелявання звычайна знікае пры пераносе.

Пачніце з таго, што шлюз фактычна прапануе, затым выберыце кліент, які размаўляе на гэтым пратаколе. Капіраванне профілю з іншага сайта — гэта шлях, якім людзі пачынаюць адладжваць уліковыя даныя, якія ніколі не былі праблемай.

Падобныя артыкулы