Как да стартирате OpenConnect във фонов режим след интерактивно влизане
Завършете влизането на преден план, след което предайте тунела на собствения фонов режим на клиента. Проверките, които го оставят откриваем и спираем.
Завършвате заявката за MFA, тунелът се вдига и затварянето на терминала сваля връзката заедно със себе си. Това е проблем на надзор, а не на удостоверяване, и OpenConnect вече предлага ключа, който го решава. Поправката е да оставите клиента да се разклони във фон, след като стартирането приключи и интерактивната част наистина е свършила. Следва поредица от проверки: минавайте ги по ред и спрете на първата, която не важи за вашия шлюз.
Потвърдете какво изисква шлюзът при влизане
Преди да напишете команда, запишете пътя на удостоверяването, който налага внедряването. Само сертификат, парола плюс токен и обиколка през браузър към доставчик на SAML се държат различно и фоновият режим не може да прескочи нито едно от тях. Опцията променя това, което се случва след стартирането, но никога това, което се случва по време на него.
Изкушаващото решение е вместо това да се автоматизира заявката. Обвивка, която въвежда фиксиран отговор при разпознаване на заявка за парола, се чупи в момента, в който шлюзът поиска еднократен код, и оставя удостоверение във файл, който други профили могат да прочетат. Ако човек трябва да одобри сесията, дръжте човека в цикъла.
Стартирайте първата сесия на преден план и прочетете изхода
Свържете се нормално веднъж и оставете цялото ръкостискане да се отпечата. Отбележете протокола, пътя на сертификата или токена, адреса на тунела, който сървърът задава, и всяко предупреждение преди приемането на връзката. Този запис е вашата базова линия и единственият евтин начин по-късно да различите проблем при клиента от промяна при шлюза. Запазете го извън буфера на терминала.
След това повторете същото извикване с добавен фонов режим и PID файл, например openconnect --background --pid-file /run/openconnect.pid vpn.example.net, като оставите изискваните от шлюза опции за протокол и удостоверяване на същия ред. Ръководството на OpenConnect описва тази опция като продължаване във фон след завършване на стартирането и точно затова интерактивната фаза трябва да приключи първа.
Направете работещия процес откриваем и спираем
PID файлът е доказателство само докато съвпада с жив процес. Сложете го в директория, притежавана от сервизния профил, и сравнете записания номер с таблицата на процесите, преди да изпратите сигнал. Презарежданията и сривовете оставят файла, а остарелият файл е обичайната причина скрипт за спиране да съобщава успех, докато тунелът още работи. Третирайте проверката като част от процедурата по спиране, а не като незадължителна стъпка.
Изпратете сигнал към проверения PID, след което потвърдете, че интерфейсът на тунела наистина е изчезнал, вместо да се доверявате на кода за изход. Ако клиентът се нуждае от повишени права, за да конфигурира интерфейса, сигналът трябва да дойде от профил, на който е разрешено да го изпраща.
Не поставяйте фоновия режим под надзорник
systemd и подобни надзорници очакват да притежават процеса, който са стартирали, затова клиент, който се разклонява, ги обърква. Надзорникът вижда изход на стартера, докато истинската връзка продължава, така че логиката за рестартиране, отчитането на състоянието и таймаутите за спиране описват нещо, което вече не е вярно. Напишете юнита в поддържаната схема на преден план и оставете надзорника да свърши работата на демона.
Пазете --background за сесии, които човек стартира и след това се отдалечава. Ако изискването е тунел, който съществува преди някой да влезе, липсващото парче е одобрена неинтерактивна идентичност плюс план за нейното подновяване и никой флаг на командния ред не дава нито едното. Добавянето на флага към скрипт за зареждане създава тунел, който тихо се проваля при първото изтекло удостоверение.
Отнасяйте се към бисквитката на сесията като към удостоверение
OpenConnect документира отделна фаза на удостоверяване чрез --authenticate и полученият материал може да бъде върнат с --cookie-on-stdin. Тази двойка съществува за интеграционна работа и това, което произвежда, е толкова чувствително, колкото паролата, която го е създала.
Дръжте стойността далеч от историята на shell, от регистрите и от всеки тикет, който отваряте. Скриптът за предаване също трябва да запази проверената информация за крайната точка, която клиентът е получил заедно с бисквитката; пропуснете ли я, по-късно пускане може да се свърже с хост, който никога не сте удостоверявали, което е по-лошо от връзка, която просто се проваля.
Минете през списъка, преди да затворите терминала
Четири неща трябва да са верни: интерактивното влизане е приключило на преден план, PID файлът сочи към проверен от вас процес, въпросът с надзорника е решен в едната или другата посока и бисквитката има план за съхранение, който не е обикновен текстов файл. Когато и четирите са налице, отдалечаването от терминала е безопасно и тунелът продължава да работи.
Ако едно от тях се провали, поправете този елемент, преди да пипате останалите, защото останалите проверки не могат да го компенсират. Запазете и записа от предния план на първото пускане: следващият път, когато тунелът падне без предупреждение, точно тази базова линия разделя промяна от страна на шлюза от такава от страна на клиента.