AnyConnect пада кад затворите терминал: провере сесија
Linux AnyConnect клијент памти сесије пријаве отворене при повезивању и руши тунел кад се једна од њих затвори. Проверите редослед пре него што препишете utmp.
Тунел је подигнут, затворите резервни терминал и VPN падне без иједног притиска типке у клијенту. У Linux AnyConnect клијенту пријављени узрок је обрачун сесија, а не усмеравање: клијент бележи које су сесије пријаве постојале кад се тунел подигао и крај било које од њих сматра разлогом да га сруши. Провере испод иду редом, а прва која не успе каже гледате ли уопште ово понашање. Ништа у уобичајеном излазу клијента не помиње терминал, зато је први нагон, кривити концентратор, обично узалудан посао.
Не почињите уређивањем системских датотека. Сваки корак или објашњава пад или уклања кандидата, а јефтини кораци долазе први.
Одвојите пад сесије од пада доњег слоја
Поново се повежите одмах након прекида. Тунел који се врати у неколико секунди, на истој мрежи и без нових акредитива, упућује на локални окидач попут затворене сесије, а не на мртав uplink, Wi-Fi роаминг или временско ограничење мировања на концентратору. Тунел који виси на Connecting или не успева док не промените мрежу је други чланак.
Запишите шта је било отворено кад се тунел подигао: терминал из којег сте покренули клијент, сваки други shell, графичку пријаву и сваку SSH сесију са другог рачунара. Та листа треба ускоро, а реконструисати је по сећању после следећег пада није поуздано.
Проверите шта је клијент забележио при повезивању
Клијент не испитује родитеље процеса ни власништво терминала. Сними скуп сесија пријаве присутних при повезивању и касније га упоређује; кад члан нестане, поређење не успе и тунел оде с њим. Зато затварање прозора из којег сте се повезали може бити безопасно, док затварање неповезаног резервног терминала убија везу: важно је да ли је та сесија била у изворном скупу. То је поређење скупова, а не бројање, зато замена сесије може бити једнако кобна као губитак једне.
Наведите шта је клијент могао видети пре него што било шта промените:
who
w
last -n 10
sudo ls -l /run/utmpСваки ред из who је унос корисничког процеса у utmp. Ако се ваша сесија појављује двапут, једном за графичку пријаву и једном за терминал, оба уноса су постојала при повезивању и оба су кандидати.
Уклоните из utmp само сопствени унос
Објављени заобилазни поступак чини сесију коју ћете користити невидљивом у utmp пре него што се клијент покрене. Мали C програм пролази кроз getutent(), проналази запис чији је ut_line једнак TTY-у стандардног улаза, а затим преписује тај запис. Редослед је намеран: setutent(), читање уноса, копирање његовог ut_id, постављање ut_type на DEAD_PROCESS, брисање поља корисника и реда, преписивање помоћу pututline(), затим endutent().
Компајлирајте га, а затим га покрените као root из shell-а који ће покренути клијент:
sudo ./utmpremove && /opt/cisco/anyconnect/bin/vpn -s connect vpn.example.eduДва начина неуспеха објашњавају већину извештаја да алат не ради ништа. Делује на TTY повезан са стандардним улазом, па покретање из скрипте или cron посла без терминала не оставља ништа за поређење. И /run/utmp није писан обичним корисницима, па покретање без root-а тихо не успева ако не проверите излазни статус.
Потврдите да тунел преживљава затварање
Тестирајте механизам уместо да га претпостављате. Повежите се из сесије коју намеравате да задржите, отворите други терминал, затворите други, па потврдите са vpn state и погледом на списак интерфејса да је тунел још подигнут. Ако тунел преживи, окидач је био одређена врста сесије, а не свака сесија, и пронашли сте сесију која мора остати отворена.
Ако и даље пада, посматрана сесија је била другде, најчешће графичка пријава која је створила ваш терминал, а уклањање једног TTY уноса не помаже. Поновите посматрање са целом листом из првог корака уместо додавања нових захвата.
Кад је преписивање utmp-а погрешан одговор
utmp је заједничко књиговодство, а не приватна табела. Преписивање уноса још живе сесије чини да је who, w и неки алати за ревизију приказују мање, а програм који касније затвори тај исти унос може потпуно отказати. Ограничите алат на сопствену сесију, сачувајте копију изворне датотеке и не претварајте га у услугу покретања која брише сваки запис.
Ако ваша организација прикупља обрачун сесија ради усаглашености, овај поступак је у сукобу с тим захтевом, а подржани је одговор верзија клијента или други начин приступа, а не закрпљени utmp. За већину је најмање инвазивно решење једноставно покренути клијент из сесије која ће остати отворена цео дан и оставити тај прозор на миру.
Пре него што затворите тикет, запишите коју је сесију клијент посматрао кад се тунел подигао. Тај један ред претвара тајанствени прекид у услов који се може поновити за следећу особу за рачунаром.