Ծպտյալ նշանի ցանցի փոխանակում usbip-ի վրա հիմնված օգտատերերի միջև

Հավատարմագրային ծառայությունների վերաբերյալ օրենսդրության փոփոխությունների հետ կապված («Էլեկտրոնային վստահության ծառայությունների մասին» Ուկրաինա) ձեռնարկությունը կարիք ունի մի քանի ստորաբաժանումների, որոնք կաշխատեն նշանների վրա տեղակայված բանալիների հետ (այս պահին ապարատային բանալիների քանակի հարցը դեռ բաց է. )

Որպես ամենացածր գնով գործիք (անվճար), ընտրությունը անմիջապես ընկավ usbip. Ubintu 18.04-ի սերվերը սկսեց աշխատել հրապարակման շնորհիվ USB/IP-ի սանձահարում և հաջողությամբ փորձարկվել է մի քանի ֆլեշ կրիչների վրա (այն ժամանակ նշանի բացակայության պատճառով): Ժամանակի այդ պահին մենաշնորհային սեփականությունից բացի (օգտագործողի համար ամրագրում) այլ հատուկ խնդիրներ չեն հայտնաբերվել: Հասկանալի է, որ մի քանի օգտատերերի (սկզբից՝ առնվազն երկուսի) մուտքը կազմակերպելու համար անհրաժեշտ է ժամանակին բաժանել նրանց հասանելիությունը և ստիպել հերթով աշխատել։

Հարցն այն էր, թե ինչպես կարող եմ դա անել նվազագույն պարով, որպեսզի ամեն ինչ աշխատի բոլորի մոտ...

Մասն անշնորհք է

Ծպտյալ նշանի ցանցի փոխանակում usbip-ի վրա հիմնված օգտատերերի միջև
Տարբերակ XNUMX. Մի քանի դյուրանցումներ դեպի bat ֆայլեր, մասնավորապես
ա) Մուտքի ստեղնի միացում.
բ) միտումնավոր անջատում.

Պարբերություն «б» վիճահարույց է, ուստի որոշվեց 3 րոպեում ժամանակ տրամադրել բանալիով աշխատելու համար:

Usbip հաճախորդի առանձնահատկությունն այն է, որ գործարկվելուց հետո այն մնում է կախովի վահանակում, առանց կոնսոլի նիստն ընդհատելու կարող եք կապը «մոտավորապես» փակել հաճախորդի կողմից և նաև սերվերի կողմից:

Ահա թե ինչն է լավ աշխատել մեզ մոտ.

առաջին՝ կապ on.bat

usbip -a 172.16.12.26 4-1
msg * "Подпись/токен недоступны или заняты "

երկրորդ՝ անջատում off.bat

ping 127.0.0.1 -n 180
taskkill /IM usbip.exe /F

Առանց օգտագործողի գիտակցության վրա հենվելու՝ սցենարները համակցվել են նշան.չղջիկ

on.bat | off.bat

Ինչ է տեղի ունենում. բոլոր ֆայլերը գտնվում են նույն թղթապանակում, որը գործարկվում է token.bat ֆայլի կողմից, եթե կապը փակվում է, օգտվողն անմիջապես հաղորդագրություն է ստանում բանալին անհասանելի լինելու մասին, մեկ այլ դեպքում՝ միայն 180 պինգից հետո: Կոդի վերը նշված տողերը կարող են հագեցած լինել «@ECHO OFF» և վահանակի ուղղությունը դեպի «> nul», որպեսզի օգտագործողին շատ չշոկի, սակայն անհրաժեշտ չէ թեստավորում կատարել: Նախնական «գործարկումը» USB կրիչով ցույց տվեց, որ ամեն ինչ կանխատեսելի էր, հուսալի և պարզ: Ավելին, սերվերի կողմից մանիպուլյացիաներ չեն պահանջվում։

Ծպտյալ նշանի ցանցի փոխանակում usbip-ի վրա հիմնված օգտատերերի միջև

Բնականաբար, թոքենի հետ անմիջականորեն աշխատելիս ամեն ինչ այնպես չի ստացվել, ինչպես սպասվում էր. սարքի կառավարիչում ֆիզիկական միացման դեպքում նշանը գրանցվում է որպես 2 սարք (WUDF և սմարթ քարտ), իսկ ցանցային միացումով միայն որպես WUDF (չնայած. սա բավական է PIN կոդ պահանջելու համար):

Ծպտյալ նշանի ցանցի փոխանակում usbip-ի վրա հիմնված օգտատերերի միջև

Պարզվում է նաև, որ դաժան «taskkill»-ն այնքան էլ դաժան չէ, և հաճախորդի վրա կապը փակելը խնդրահարույց է, և եթե նույնիսկ հաջող էր, դա չի երաշխավորում նրա համար սերվերի վրա փակելը։

Հաճախորդի վրա զոհաբերելով բոլոր կոնսուլները, երկրորդ սցենարը ստացավ հետևյալ ձևը.

ping 127.0.0.1 -n 180 > nul
taskkill /IM usbip.exe /F /T  > nul
ping 127.0.0.1 -n 10 > nul
taskkill /IM conhost.exe /F /T  > nul

չնայած դրա արդյունավետությունը 50%-ից պակաս է, քանի որ սերվերը համառորեն շարունակում էր կապը բաց համարել:

Կապի հետ կապված խնդիրները հանգեցրին սերվերի կողմի թարմացման մասին մտքերին:

Սերվերի մաս

Ինչ է ձեզ անհրաժեշտ.

  1. Անջատեք ոչ ակտիվ օգտվողներին ծառայությունից:
  2. Տեսեք, թե ով է ներկայումս օգտագործում (կամ դեռ փոխառում) նշանը:
  3. Տեսեք, արդյոք նշանը միացված է համակարգչին:

Այս խնդիրները լուծվել են՝ օգտագործելով crontab և apache ծառայությունները։ Մեզ հետաքրքրող 2-րդ և 3-րդ կետերի մոնիտորինգի արդյունքների վիճակի վերագրանցման դիսկրետ բնույթը ցույց է տալիս, որ ֆայլային համակարգը կարող է տեղակայվել ramdrive-ում: Ավելացվեց տող /etc/fstab-ում

tmpfs   /ram_drive      tmpfs   defaults,nodev,size=64K         0       0

Արմատում ստեղծվել է սկրիպտների թղթապանակ՝ unmounting-mounting the token usb_restart.sh

usbip unbind -b 1-2
sleep 2
usbip bind -b 1-2
sleep 2
usbip attach --remote=localhost --busid=1-2
sleep 2
usbip detach --port=00

ստանալով ակտիվ սարքերի ցուցակ usblist_id.sh

usbip list -r 127.0.0.1 | grep ':' |awk -F ":" '{print $1}'| sed s/' '//g | grep -v "^$" > /ram_drive/usb_id.txt

ակտիվ IP-ների ցանկի ձեռքբերում (օգտագործողի ID-ների ցուցադրման հետագա փոփոխությամբ) usbip_client_ip.sh

netstat -an | grep :3240 | grep ESTABLISHED|awk '{print $5}'|cut -f1 -d":" > /ram_drive/usb_ip_cli.txt

Crontab-ն ինքնին այսպիսի տեսք ունի.

*/5 * * * * /!script/usb_restart.sh > /dev/null 2>&1
* * * * * ( sleep 30 ; /!script/usblist_id.sh > /dev/null)
* * * * * (sleep 10 ; /!script/usbip_client_ip.sh > /dev/hull)

Այսպիսով, մենք ունենք. յուրաքանչյուր 5 րոպեն մեկ նոր օգտվող կարող է միանալ, անկախ նրանից, թե ով է աշխատել նշանի հետ: /ramdrive թղթապանակը միացված է http սերվերին՝ օգտագործելով symlink, որում պահվում են 2 տեքստային ֆայլեր՝ ցույց տալով usbip սերվերի կարգավիճակը։

Հաջորդ մասը՝ «Տգեղը փաթաթում»

Տարբերակ II. Օգտագործողին մի փոքր գոհացնելու համար գոնե մի քիչ վախեցնող ինտերֆեյսով: Շփոթված է այն փաստով, որ օգտվողներն ունեն Windows-ի տարբեր տարբերակներ՝ տարբեր շրջանակներով, տարբեր իրավունքներով, ավելի քիչ խնդրահարույց մոտեցումներով, քան Ղազարոս Ես դա չգտա (ես իհարկե C#-ի համար եմ, բայց ոչ այս դեպքում): Դուք կարող եք գործարկել bat-ի ֆայլերը հետին պլանում գտնվող ինտերֆեյսից, նվազագույնի հասցնելով, բայց առանց պատշաճ փորձարկման, ես անձամբ իմ կարծիքին եմ. դուք պետք է պատկերացնեք այն, որպեսզի հավաքեք օգտվողների դժգոհությունը:

Ծպտյալ նշանի ցանցի փոխանակում usbip-ի վրա հիմնված օգտատերերի միջև

Ինտերֆեյսի և ծրագրաշարի միջոցով լուծվել են հետևյալ խնդիրները.

  1. Ցույց է տալիս, թե արդյոք նշանը ներկայումս զբաղված է:
  2. Առաջին գործարկման ժամանակ նախնական կարգավորումը ներառում է «ճիշտ» bat ֆայլերի ստեղծում, որոնք իրականացնում են սեսիայի մեկնարկը և ընդհատումը նշանային սերվերի հետ: Հետագա մեկնարկներում «ծառայության» ռեժիմի իրականացում գաղտնաբառի միջոցով:
  3. Սերվերի հետ կապի առկայության ստուգում, որի արդյունքում նա հարցում է անում՝ արդյոք այն զբաղված է, թե ցուցադրում է հաղորդագրություններ խնդիրների մասին։ Երբ հաղորդակցությունը վերսկսվում է, ծրագիրը ավտոմատ կերպով սկսում է աշխատել նորմալ ռեժիմով:

WEB սերվերի հետ աշխատելն իրականացվում է լրացուցիչ fphttpclient snap-in-ի միջոցով:


այստեղ կլինի հղում դեպի հաճախորդի ընթացիկ տարբերակ

կան նաև հետագա նկատառումներ հոդվածի թեմայի վերաբերյալ, ինչպես նաև մասնակի նախնական ոգևորություն VirtualHere արտադրանքի նկատմամբ՝ իր առանձնահատկություններով...

Source: www.habr.com

Добавить комментарий