I-Bot yokubeka iliso kwiinkonzo zewebhu kwisiqingatha seyure: itelegram + bash + cron

I-Bot yokubeka iliso kwiinkonzo zewebhu kwisiqingatha seyure: itelegram + bash + cron

Ngamanye amaxesha kufuneka ukhawuleze usebenzise indlela yokubeka esweni inkonzo entsha, kodwa awunazo iziseko zophuhliso okanye ubuchule obufunekayo. Kule khokelo, siza kusebenzisa isixhobo sokubeka esweni nayiphi na inkonzo yewebhu kwisiqingatha seyure, sisebenzisa izixhobo ezakhelwe ngaphakathi kuphela. ubuntu: bash, cron, kunye ne-curl. Siza kusebenzisa iTelegram ukuhambisa izaziso.

"I-cherry kwikhekhe" iya kuba kukubandakanyeka ngokomzwelo kwabasebenzisi. Ivavanywa ebantwini - iyasebenza.

Xa thina kwinkonzo ye-telemedicine uGqirha okufuphi wenza i-chatbot ukumisela inqanaba loxinzelelo lwabasebenzisi, sifuna ukubeka iliso. Kwiiyure ezimbalwa, iprojekti encinci yadalwa engasebenzi kakuhle kuphela, kodwa yongeza ipositivity ngemiyalezo yayo.

Okokuqala, masifumane indawo yokugcina enemibhalo:

git clone https://github.com/rshekhovtsov/msms.git

Yiya kwifolda ye-msms kwaye emva koko usebenze kuyo.

Ukuba itelegram ivaliwe, sebenzisa ummeli. Eyona ndlela ilula kunye neyona ithembekileyo yi-torsocks:

sudo apt install tor
sudo apt install torsocks

Njengomzekelo, makhe simisele esweni iphepha lokuqala le-google.com ngamanyathelo amathathu.

INYATHELO 1. Yenza ibhot kwitelegram kwaye ufumane id yomsebenzisi

  • Kwibha yokukhangela abafowunelwa kwitelegram esiyifunayo @botfather:

    I-Bot yokubeka iliso kwiinkonzo zewebhu kwisiqingatha seyure: itelegram + bash + cron

  • Siyisungula ngeqhosha lokuQala, faka i/newbot umyalelo kwaye uphendule imibuzo. Kuya kufuneka uhlale ukhumbula ukuba igama ligama le-bot eliza kuboniswa kubasebenzisi, kwaye igama lomsebenzisi lahlukile kwaye kufuneka liphele ngo "bot":

    I-Bot yokubeka iliso kwiinkonzo zewebhu kwisiqingatha seyure: itelegram + bash + cron

    Phakathi kwezinye izinto, i-bot iya kukhupha ithokheni eyimfihlo ye-HTTP API, ekufuneka ikopishwe kwaye igcinwe kwifayile ye-telegram-api-key.txt kwifolda ye-msms.

  • Sichwetheza igama le-bot yethu kwibar yokukhangela yetelegram kwaye siyiqalise.
  • Njengokugqiba, masizongezele kuluhlu lwabamkeli bezilumkiso zokubeka iliso:
    sudo chmod +x ./recipients-setup.sh
    torsocks ./recipients-setup.sh

    Isikripthi siya kubonisa uluhlu lweefowuni zamva nje kwi-bot kufuneka kubekho umgca omnye kunye ne-id yethu kunye negama kwitelegram. Sithatha le id kwaye siyigcine kwiinkonzo zefayile/google-recipients.txt. Ifomathi yefayile: umgca ngamnye yi-id enye. Umzekelo:

    123456789
    987654321

Ukongeza umamkeli omtsha, kufuneka umcele ukuba aqale i-bot kwitelegram, aqhube abamkeli-setup.sh kwaye wongeze i-id kwifayile.

INYATHELO 2. Misela ukubeka iliso

Inkonzo ichazwa ngokwenza ifayile ye-ini kwifolda yeenkonzo. Kufuneka usete iiparamitha ezintlanu:

  1. MSMS_SERVICE_NAME: igama lenkonzo - liza kusetyenziswa kwizilumkiso kunye nelog yokubeka iliso.
  2. MSMS_SERVICE_ENDPOINT: isiphelo senkonzo esiza kuqhagamshelana nayo nge-curl.
  3. MSMS_CURL_PARAMS: ukhetho olongezelelweyo lwe-curl, jonga umzekelo ongezantsi.
  4. MSMS_EXPECTED: impendulo elindelekileyo evela kwinkonzo. Isetyenziswa ukuba impendulo imfutshane.
  5. MSMS_EXPECTED_FILE: Igama lefayile enempendulo yenkonzo elindelekileyo. Ukuba kucacisiwe, bhala ngaphezulu MSMS_EXPECTED.
  6. MSMS_RECIPIENTS: ifayile enoluhlu lwabamkeli besaziso.

Isicelo esiya kugoogle.com sibuyisela ihtml esisigxina kunye nokwalathisa, siya kuyisebenzisa njengempendulo elindelekileyo yeseva:

curl google.com > services/google-response.html

Masenze iinkonzo/google.ini ifayile:

MSMS_SERVICE_NAME='google front page'

# service endpoint
MSMS_SERVICE_ENDPOINT='google.com'

# curl parameters
MSMS_CURL_PARAMS='-s --connect-timeout 3 -m 7'

# expected service response
MSMS_EXPECTED_FILE='google-response.html'

# recipients list file
MSMS_RECIPIENTS='google-recipients.txt'

В MSMS_CURL_PARAMS unokuseta yonke into enokwenziwa yi-curl, kubandakanya:

  1. Khubaza imiyalezo ye-curl ukunqanda ukudida ikhonsoli kunye nelog: -s
  2. Cwangcisa ixesha lokuvala uqhagamshelo kunye nenkonzo ejongwayo (ngemizuzwana): --connect-timeout 3
  3. Seta ixesha lokuvala impendulo: -m 7
  4. Khubaza uqinisekiso lwesatifikethi se-SSL (umzekelo, ukuba usebenzisa isatifikethi esizisayinileyo): --insecure
  5. Chaza uhlobo lwesicelo se-http: -X POST
  6. Chaza izihloko: -H "Content-Type: application/json"
  7. Chaza ibhodi yesicelo njengomtya okanye ifayile. Umzekelo wefayile: -d @request.json

Sizicime izaziso kwaye sabeka ixesha lokuvala libe yimizuzwana emi-3. ukudibanisa kunye ne-7 sec. ukufumana impendulo yenkonzo.

Ukuqwalasela: Cacisa amaxabiso eparameter kwiingcaphuno enye, njengakumzekelo. Ngelishwa, i-bash ibuthathaka kakhulu kule ngqiqo, kwaye ibhabhathane ngengozi enophawu lokucaphula olungalunganga inokukhokelela ekufeni kwendalo yonke ngeempazamo ezinzima ukuzibona.

Siye sabeka iliso. Masijonge ukuba yonke into ilungile:

sudo chmod +x ./monitoring.sh
torsocks ./monitoring.sh

Iscript kufuneka sibonise umyalezo onje:

2020-01-10 12:14:31
health-check "google front page": OK

INYATHELO 3. Ukumisela ishedyuli

Masiseke ishedyuli yokubeka iliso kwi-cron:

sudo crontab -e

Makhe songeze umgca ukujonga google.com yonke iminithi:

*/1 * * * * torsocks <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.sh >> <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.log 2>&1

Siya kongeza isilumkiso yonke imihla ngo-11.00:XNUMX am, siqinisekisa ukusebenza kokubekwa kweliso ngokwalo. Ukwenza oku, siya kudlula i-DAILY parameter kwiscript:

0 11 * * * torsocks <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.sh DAILY >> <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.log 2>&1

2>&1 - ubuchule obuqhelekileyo obubuyisela iimpazamo kumthombo oyintloko wemveliso. Ngenxa yoko, baya kugqiba kwilog yokubeka iliso.

Masigcine utshintsho kwaye siluthathe ngomyalelo:

 sudo service cron reload

Unokufunda ngakumbi malunga nokuseta i-cron, umzekelo, apha.

Ngaloo ndlela, yonke imzuzu iscript sokubeka iliso siya kuqaliswa, esiya kuqhagamshelana ne-google.com nge-curl. Ukuba impendulo efunyenweyo yahlukile kuleyo ibilindelekile, iscript siya kuthumela isaziso setelegram kuluhlu lwabamkeli. Ilog yophicotho igcinwa kwifayile monitoring.log

Ukuba sifuna ukongeza enye inkonzo, senza ngokulula ifayile entsha kuyo kwifolda yeenkonzo kwaye, ukuba kuyimfuneko, yenza uluhlu olwahlukileyo lwabamkeli. Yonke enye into iya kusebenza ngokuzenzekelayo.

Ukuba inkonzo etshekishwayo ayifumaneki, isaziso siya kuthunyelwa ngomzuzu ngamnye. Ukuba awukwazi ukubuyisela ngokukhawuleza inkonzo, unokukhubaza okwethutyana izaziso kwiipropathi zetelegram ye-bot.

Ngoku makhe sijonge ngakumbi kwiimpawu ezongezelelweyo kunye nokuphunyezwa kwezikripthi.

Iipateni zoMyalezo kunye noNxibelelwano lweMvakalelo

Ukwenza unxibelelwano kunye ne-bot lube nomdla ngakumbi, sayibiza ngokuba yiManechka, songeza umfanekiso ofanelekileyo we-avatar kwaye saqesha iingcali ze-PR eziqeqeshiweyo ukwenza imiyalezo yomyalezo. Ungasebenzisa amava ethu okanye utshintshe incasa yakho.

Umzekelo ngolu hlobo:

I-Bot yokubeka iliso kwiinkonzo zewebhu kwisiqingatha seyure: itelegram + bash + cron
okanye njengale:

I-Bot yokubeka iliso kwiinkonzo zewebhu kwisiqingatha seyure: itelegram + bash + cron
Ngoba kutheni?

Igama lebhot kunye ne-avatar zisetwa nge @botfather.
Iitemplates zomyalezo zikwifolda itemplates:

  • curl-fail.txt: umyalezo othunyelwe xa i-curl ibuyisela ikhowudi yemposiso engeyiyo-zero. Ngokuqhelekileyo ithetha ngokungenakwenzeka ukufikelela kwinkonzo.
  • yonke imihla.txt: Umyalezo wemihla ngemihla oqinisekisa ukuba ukubeka iliso kwenkonzo kuyasebenza.
  • inkonzo-fail.txt: Umyalezo othunyelweyo xa impendulo yenkonzo yahlukile koko bekulindelekile.

Makhe sijonge kwiinketho zokwenza ngokwezifiso usebenzisa iitemplates zemiyalezo eyakhelwe-ngaphakathi njengomzekelo.
Iitemplates zisebenzisa i-emoji. Ngelishwa, u-habr akazibonakalisi.
Ukukhetha i-emoji, kukulungele ukusebenzisa uphendlo emojipedia.org:

I-Bot yokubeka iliso kwiinkonzo zewebhu kwisiqingatha seyure: itelegram + bash + cron

Ukopisha ngokulula kwaye uncamathisele isimboli esifanelekileyo kwisicatshulwa setemplate (le yiyunicode eqhelekileyo).

  1. curl-fail.txt:
    Котёнок,  помоги мне... 
    Не могу достучаться до сервиса "$MSMS_SERVICE_NAME" 
    `CURL EXIT CODE: $EXIT_CODE`

    Sisebenzise igama lenkonzo esilichazileyo (eguquguqukayo MSMS_SERVICE_NAME) kunye nokutshintsha koshicilelo lwangaphakathi ngekhowudi yokuphuma ye-curl (EXIT_CODE). Siphinde safomatha umyalezo sisebenzisa uphawu Ukumakishwa kwetelegram: "`" oonobumba barhangqa isicatshulwa esinobubanzi obusisigxina. Ekubeni iingcaphuno kunye ne-apostrophes zizisimboli ze-bash, sizibaleka nge "". Amagama aguquguqukayo andulelwa luphawu "$".

    Isiphumo:

    I-Bot yokubeka iliso kwiinkonzo zewebhu kwisiqingatha seyure: itelegram + bash + cron

  2. service-fail.txt:
    Котёнок, помоги мне... 
    Сервис "$MSMS_SERVICE_NAME" меня расстроил
    Он работает неправильно, вот что он мне отвечает:
    `$RESPONSE`

    Isiphumo:

    I-Bot yokubeka iliso kwiinkonzo zewebhu kwisiqingatha seyure: itelegram + bash + cron

    Apha sisebenzisa enye inguqulelo yeskripthi: RESPONSE. Iqulethe impendulo yenkonzo.

  3. daily.txt:
    Малыш, привет!
    У меня всё хорошо, cлежу за сервисом:
    "$MSMS_SERVICE_NAME" каждую минутку...
    А как у тебя дела?
    

    Isiphumo:

    I-Bot yokubeka iliso kwiinkonzo zewebhu kwisiqingatha seyure: itelegram + bash + cron

Masiqhubele phambili ekuphunyezweni kwezikripthi.

Iskripthi sokubeka iliso

ukubeka iliso.sh yenza ubhaqo olulula oluzenzekelayo-ithatha zonke iifayile ze-ini kulawulo lweenkonzo kwaye nganye nganye iphumeza iscript esingundoqo ngengqiqo yokujonga kunye nokuthumela izilumkiso:

#!/bin/bash
cd $(dirname "$0")/services

for service_ini  in $(ls *.ini); do
    bash ../msms.sh "$1" "$service_ini"
done

Ukuvelisa umyalezo wemihla ngemihla malunga nobume bokubeka iliso, ungadlula i-DAILY parameter kwiscript.

Nceda uqaphele ukuba xa iscript siqala, isiqulathi seefayili sangoku sitshintshela kwiinkonzo. Oku kukuvumela ukuba ukhankanye iindlela zefayile ezinxulumene neenkonzo kwiifayile zeini.

Iscript sokujonga kunye nokuthumela izaziso

msms.sh iqulethe eyona ngqiqo yokujonga inkonzo kunye nokuthumela izilumkiso.

Ukusebenza ngetelegram:

# telegram endpoint
TG_API_URL="https://api.telegram.org/bot$(cat ../telegram-api-key.txt)/sendMessage"

#################################################################
# send message to telegram
# parameter: message text
#################################################################
function send_message {
    for chat_id  in $(cat ../$MSMS_RECIPIENTS); do
	curl -s -X POST --connect-timeout 10 $TG_API_URL -d chat_id=$chat_id -d parse_mode="Markdown" -d text="$1"
	echo
    done
}

Senza i-URL ukufikelela kwitelegram ye-REST API usebenzisa isitshixo esiyimfihlo esigcinwe kwifayile.

Umsebenzi we send_message usebenzisa i-curl ukuthumela imiyalezo kule REST API, ithatha iid zomamkeli kwifayile esiyikhankanye kwi ini. Kwidatha esiyithumelayo, sibonisa ukuba sisebenzisa uphawu lomyalezo: parse_mode="Markdown".

Masibonise umhla kunye nexesha langoku kwaye silayishe ifayile ye-ini.

echo $(date '+%Y-%m-%d %H:%M:%S')

# load variables from .ini file:
. $2

Umtya womlingo . $2 yenza ifayile ye ini egqithiselwe kwigalelo njenge parameter yesibini njengombhalo oqhelekileyo, ingenisa amaxabiso achaziweyo kuyo kwizinto eziguquguqukayo zemekobume.

Layisha impendulo elindelekileyo kwifayile ukuba iparameter ichaziwe MSMS_EXPECTED_FILE:

if [ -n "$MSMS_EXPECTED_FILE" ]; then
 MSMS_EXPECTED="$(cat "$MSMS_EXPECTED_FILE")"
fi

Siza kujonga inkonzo kwaye sithumele izilumkiso ukuba kuyimfuneko:

RESPONSE="$(eval curl $MSMS_CURL_PARAMS "$MSMS_SERVICE_ENDPOINT")"
EXIT_CODE=$?
if [[ $EXIT_CODE != 0 ]]; then
    echo health-check "$MSMS_SERVICE_NAME" FAILED: CURL EXIT WITH $EXIT_CODE
    MESSAGE="$(cat ../templates/curl-fail.txt)"
    MESSAGE=$(eval echo $MESSAGE)
    send_message "$MESSAGE"
elif [[ "$RESPONSE" != "$MSMS_EXPECTED" ]]; then
    echo health-check "$MSMS_SERVICE_NAME" FAILED: "$RESPONSE"
    MESSAGE="$(cat ../templates/service-fail.txt)"
    MESSAGE=$(eval echo $MESSAGE)
    send_message "$MESSAGE"
else
    echo health-check "$MSMS_SERVICE_NAME": OK
fi

Okokuqala sinikezela ngokuguquguqukayo RESPONSE isiphumo sokuphumeza i-curl command yale nkonzo.

Inkcazo EXIT_CODE=$? ibeka isiphumo somyalelo wokugqibela kwinguqu, okt. curl. Ukuba kuyimfuneko ukuthumela isilumkiso, itemplate ifundwa kwifayile ehambelanayo kwaye ithunyelwe kubamkeli usebenzisa. send_message.

Ibhloko yokugqibela iqhuba i-DAILY parameter:

if test "$1" = "DAILY"; then
    echo health-check "$MSMS_SERVICE_NAME" DAILY
    MESSAGE="$(cat ../templates/daily.txt)"
    MESSAGE=$(eval echo $MESSAGE)
    send_message "$MESSAGE"
fi

Ithumela umyalezo oqinisekisa umsebenzi wokubeka iliso ngokwayo.

Ukufumana uluhlu lwe ID yomsebenzisi

abamkeli-setup.sh ifowunela i-API yocingo ukuze ufumane imiyalezo yamva nje ebhekiswa kwi-bot:

curl -s https://api.telegram.org/bot$(cat telegram-api-key.txt)/getUpdates 
| python recipients-setup.py

Oku kusebenzisa umlingo wepython ukubonisa uluhlu kakuhle. Oku akuyomfuneko, ungathatha ngokulula id efunwayo kwi json, apho umyalelo uya kuyikhupha:

torsocks curl -s https://api.telegram.org/bot$(cat telegram-api-key.txt)/getUpdates

isiphelo

Ngaloo ndlela, ungasebenzisa izikripthi esele zenziwe kunye neetemplates zemiyalezo, ukuseta kuphela iinkonzo ezibekwe iliso kunye noluhlu lwezilumkiso; unokwenza "ubuntu" obutsha kwi-bot; okanye ungenza esakho isigqibo ngokusekelwe koko bekucetywayo.

Iinketho zophuhliso olongezelelweyo zicebisa uqwalaselo kunye nokulawula esweni kwi-bot ngokwayo, kodwa apha awukwazi ukwenza ngaphandle kwepython. Ukuba umntu uyifumana phambi kwam, uyazi ukuba ungasingenisa phi isicelo sokutsala :)

umthombo: www.habr.com

Thenga ukusingathwa okuthembekileyo kwiindawo ezinokhuseleko lweDDoS, iiseva zeVPS VDS 🔥 Thenga ukusingathwa kwewebhusayithi okuthembekileyo ngokhuseleko lwe-DDoS, iiseva zeVPS VDS | ProHoster