OpenVPN бара корисничко име и лозинка на контролниот терминал, а датотека пренасочена кон стандарден влез не е тој терминал. Токму овој детаљ ја објаснува скриптата што виси додека лозинката стои таму во цевката. Промптот го црта клиентот и читањето се зема од терминалскиот уред, па пренасочувањето на stdin не менува ништо. Нахранете го клиентот низ еден од неговите документирани влезови и истата скрипта ќе се поврзе од првиот обид.

Три влеза покриваат речиси секој случај, и секој не успева на свој начин. Изберете според промптот што клиентот навистина го покажува, а не според опцијата што е најлесна за скриптирање.

Промптот не доаѓа од stdin

Кога на OpenVPN му требаат акредитиви, тој го отвора контролниот терминал и чита таму. Затоа интерактивниот тест изгледа добро, а истата команда под cron или unit-датотека стои неподвижна со промптот запишан во лог што никој не го гледа. Некои градби се враќаат на стандардниот влез кога нема терминал, и таа недоследност е полоша од тврд неуспех, бидејќи го крие проблемот до распоредувањето.

Проверете ја околината пред да напишете каков било код: стартувајте го клиентот под истиот корисник, со истиот stdin, како што ќе го направи планерот или менаџерот на услуги. Ако промптот никогаш не се појави во логот и процесот не напредува, нешто чека терминал што не постои.

Прв влез: датотека со акредитиви од два реда

Опцијата за автентикација зема патека, а датотеката содржи точно два реда, прво корисничко име па лозинка, и ништо друго. Наведете ја патеката експлицитно наместо да се потпирате на стандардно име на датотека, бидејќи залутана датотека со акредитиви во работниот директориум е начинот на кој погрешната сметка доаѓа во употреба. Поставете го режимот на 0600 и дајте сопственост на сметката што го стартува клиентот.

Клиентот ја чита таа датотека еднаш при стартувањето, па ротирањето на лозинката значи рестартирање на процесот. Тоа е обично однесувањето што го сакате, и му припаѓа на runbook-от до постапката за ротација.

Втор влез: askpass за лозинката на клучот

Приватен клуч заштитен со лозинка предизвикува втор, поинаков промпт, и тој има свој одговор од датотека: опцијата askpass ја чита фразата од првиот ред на датотека. За тунели базирани на SSH еквивалент е askpass-програма што клиентот ја извршува и чиј стандарден излез станува тајната.

Ниту една форма не ја става тајната во списокот аргументи, и двете ја оставаат да постои како датотека или како извршна програма што ја печати. Заштитата се дозволите на датотеката и сопственоста на процесот, не нејасноста. Помошник што повторува низа вградена во кодот е тајна со дополнителни чекори.

Трет влез: сопствениот CLI на порталскиот клиент

Корпоративните клиенти обично испорачуваат влезна точка на командната линија што се поврзува со именуван портал без никаков прозорец, и тоа е поддржаниот пат. На Linux клиентот GlobalProtect ги изложува операциите за поврзување и увоз на сертификат преку својот CLI, а порталите што користат сертификатска автентикација го бараат чекорот на увоз пред автоматизираното поврзување да може да работи. Претпочитајте го наместо синтетизирани притискања на копчиња: добивате вистински статус на излез, без зависност од фокусот на прозорецот, и преживува заклучен екран.

Ако првото поврзување сѐ уште бара човек да прифати сертификат, автоматизацијата не е завршена. Направете го увозот за време на поставувањето и запишете го како предуслов.

Кога текот бара псевдотерминал

Секвенцата што бара лозинка, а потоа еднократен код, нема ниту една датотека за читање. Терминалски драјвер како Expect е вистинската алатка, бидејќи чека на секој образец по ред, и му треба стартуван процес пред воопшто да може нешто да совпадне.

Два неуспеси доминираат. Скриптата што чека промпт без да го стартува клиентот чека вечно, а Tcl не е школка, па школската аритметика напишана во блокот expect не се оценува онака како што се чита. Држете го знамето за отстранување грешки вклучено додека ги градите образците, потоа исклучете го.

Тајни што истекуваат, и каде се кријат

Сѐ што се пренесува како аргумент е видливо во списокот процеси, па акредитивите припаѓаат во датотека или зад помошник, никогаш на командната линија. Еднократните кодови се трошат по дизајн и мора да се создадат за секој обид. Логовите при неуспех често го носат корисничкото име, а понекогаш и повеќе, па редактирајте ги пред да ги испратите каде било, и држете ја тајната надвор од самиот профил, бидејќи конфигурациска датотека со вградена лозинка се лепи во тикети и репозиториуми. Ротирањето на сметката тогаш значи лов на секое копие, и токму тоа е цената што овој распоред ја избегнува.

Ревидирајте ги избраните влезови, потоа поврзете ги во unit-датотеката или планерот што навистина ќе го стартува клиентот. Тунелот живее точно онолку колку што живее тој процес.

Поврзани статии