Witaj na Forum Linuxiarzy
Zanim zalogujesz się, by pisać na naszym forum, zapoznaj się z kilkoma zasadami savoir-vivre'u w dziale Administracja.
Wiadomości z problemami zamieszczone w wątku "Przywitaj się" oraz wszelkie reklamy na naszym forum będą usuwane.

Skrypt tworzący nowego użytkownika linux

Zaczęty przez gorus1, Styczeń 09, 2019, 09:02:34 PM

Poprzedni wątek - Następny wątek

TataPingu

Cytat: gorus1 w Styczeń 16, 2019, 04:04:18 PM
otóż gdyby ilość domen i użytkowników była niezmienna to zapewne próbowałbym sam napisać taki skrypt, albo najprawdopodobniej kilka skryptów.
Jednak użytkownicy  dodają domeny i je usuwają jak również sami użytkownicy są dodawani i usuwani w związku z tym liczba tych katalogów "public_html" w poszczególnych domenach będzie się zmieniać i dlatego potrzebuję takiego skryptu, który to wszystko uwzględni.

Teraz określiłeś to bardzo precyzyjnie i rozumiem w czym problem. Spróbujemy to jakoś rozgryźć.

Potrzebnych jest jednak kilka dodatkowych informycji, ale w pierwszym rzędzie istotna jest jedna, t.j.
- na czym (fizycznie) tworzone są wymienione przez Ciebie "zmieniające się domeny" i jaki Ty masz dostęp (jako root?) do serwera(ów) (bo przypuszczam, że jest to co najmniej jeden serwer )?


gorus1

Te domeny (a właściwie katalogi domen) są tworzone tylko i wyłącznie na jednym jedynym VPS, a ich struktura (ścieżka do public_html) wygląda następująco:
/home/NAZWAUŻYTKOWNIKA/domains/NAZWADOMENY/public_html
Oczywiście mam dostęp root po kluczu SSH do tego zdalnego VPS co wynika z wklejonego przeze mnie działającego polecenia.
Jednak to polecenie kopiuje tylko jeden wybrany katalog public_html , a ja chciałbym jakimś skryptem wylistować wszystkie katalogi i je pobrać rsync - iem.


TataPingu

Cytat: gorus1 w Styczeń 16, 2019, 08:32:30 PM
Jednak to polecenie kopiuje tylko jeden wybrany katalog public_html , a ja chciałbym jakimś skryptem wylistować wszystkie katalogi i je pobrać rsync - iem.

To zrozumiałem, ale chodziło mi o to, czy jesteś adminem pojedyńczej, wirtualnej maszyny VPS, czy administrujesz całego Hypervisora.
OK, coś przygotujemy. Powiedz mi teraz co jest "podstawą" VPSów, jakiś typ linuksa, któryś z uniksów ?
- jest to istotne, bo zamierzony przez Ciebie backup prawdopodobnie trzeba będzie zrobić "dwuczłonowo", tzn. na VPSie musi również lecieć odpowiedni skrypt...
- by go przygotować muszę wiedzieć, jaki OS jest tam emulowany...

gorus1

Nie no, mam dostęp tylko do pojedynczej maszyny VPS z Debian 8.3 na pokładzie.

TataPingu

#19
Cytat: gorus1 w Styczeń 17, 2019, 10:55:42 AM
Nie no, mam dostęp tylko do pojedynczej maszyny VPS z Debian 8.3 na pokładzie.

No to polecimy..
- załóż katalog i stwórz tekstowy plik np. pod /opt/BackupVPS/ExcludeVPS.list

- do pliku ExcludeVPS.list zapisz:


#
#--napiane przez TataPingu z forum linuxiarze.pl
#
- **/@eaDir
- /lost+found
#--tutaj możesz wyłączyć  dowolną domenę
#- /domenadowyłączenia
#--tutaj możesz wyłączyć  dowolną domenę
+ **/
+ **/public_html/**
- *


Teraz stwórz skrypt, który sterowany będzie crontabem np. pod /opt/BackupVPS/SciaganieVPS

Do pliku-skryptu SciaganieVPS zapisz:


#!/bin/bash
#
#--napiane przez TataPingu z forum linuxiarze.pl
#
#
# CONFIG
#
LOGFILE=/var/log/BackupVPS.log
#
ZRODLO=root@111.22.33.44:/home/
KLUCZ="ssh -p 1111 -i /sciezka/do/kluczaSSH"
CEL=/katalog/z/backupem
EXCLUDEFILE=/opt/BackupVPS/ExcludeVPS.list
#
# END CONFIG

#---- ALGORYTM
#
echo "Dnia $(date) backup domen rozpoczęty" >> "${LOGFILE}"
sleep 1s
#
# i teraz możesz użyć mojego algorytmu (przetestowany lokalnie działa poprawnie
# jak będzie z "kluczem" tego nie wiem)
#
#### rsync -r -t -p -o -g -v --progress --delete --modify-window=1 -l -H --exclude-from="${EXCLUDEFILE}" "${KLUCZ}" "${ZRODLO}" "${CEL}"
#
# albo Twojego (odpowiednio dopasowałem)
#
rsync -chavzP --stats -e "ssh -p 1111 -i /sciezka/do/kluczaSSH" --exclude-from="${EXCLUDEFILE}" "${ZRODLO}" "${CEL}"
#
#---- ALGORYTM
#
echo "Dnia $(date) backup domen zakończony pomyślnie" >> "${LOGFILE}"
sleep 1s
#
exit


Resztę musisz sam dopasować

gorus1

#20
SUPER!!!
Skrypt zadziałał świetnie i w związku z tym pytanie (na PW) jak mogę się odwdzięczyć?

Na razie skrypt testuję ręcznie i zastanawia mnie jedna sprawa tj. przy uruchomieniu go wyskakuje mi komunikat związany z kluczem SSH
Are you sure you want to continue connecting (yes/no)? ECDSA key fingerprint is
Are you sure you want to continue connecting (yes/no)?
Please type 'yes' or 'no':

czy da się jakoś sprawić aby nie było tego pytania gdyż jak cron uruchomi skrypt to niby kto miałby wpisać "yes"
Wracając do skryptu to in + zaskoczyły mnie dwie rzeczy to, że obydwa pliki można ustawić na serwerze docelowym (w moim przypadku na zyxelu) oraz, że można zastosować wyłączenia domen.
Jednak niestety, ale te wyłączenia nie działają, a kombinowałem używając różnych ścieżek i nie wiem gdzie leży błąd?
Przyznam, że ta opcja jest bardzo przydatna i chciałbym wykluczyć np. jedną ścieżką wszystkie domeny danego użytkownika np. /home/user/* jak też jakiś katalog już w samym w public_html np.
/home/user/domains/domena.pl/public_html/przykladowykatalog
Da się coś takiego ustawić?
Ponadto to wszystkie te dane miały nieco powyżej 42 GB, ale strasznie długo to trwało tj. blisko 7 godzin, a niby obydwa serwery są pod internetem 100/100 Mbps, ale to już sprawa raczej nie do Ciebie.

TataPingu

Cytat: gorus1 w Styczeń 18, 2019, 02:00:59 PM
SUPER!!!
Skrypt zadziałał świetnie i w związku z tym pytanie (na PW) jak mogę się odwdzięczyć?

Należy mi się "duża piana" (w wysokim kuflu) ;)
- a tak na poważnie, to nauczyć się powściągliwości (najpierw myśleć, a potem formuować zdania)
Ale OK, ja też kiedyś byłem młody...

Cytat: gorus1 w Styczeń 18, 2019, 02:00:59 PM
Na razie skrypt testuję ręcznie i zastanawia mnie jedna sprawa tj. przy uruchomieniu go wyskakuje mi komunikat związany z kluczem SSH
czy da się jakoś sprawić aby nie było tego pytania gdyż jak cron uruchomi skrypt to niby kto miałby wpisać "yes"

Prawdopodobnie tak i na pewno jest to związane z syntaxem:


"ssh -p 1111 -i /sciezka/do/kluczaSSH"

Jeśli Twój zapis działał prawidłowo, to nie używaj zmiennej "KLUCZ", tylko wstaw w to miejsce Twój syntax.
Ew. zmanipuluj odpowiednio $HOME/.ssh/config.

Cytat: gorus1 w Styczeń 18, 2019, 02:00:59 PM
Jednak niestety, ale te wyłączenia nie działają, a kombinowałem używając różnych ścieżek i nie wiem gdzie leży błąd?

W tym miejscu wpisujesz po prostu zarejstrowanego usera (każda domena jest userem), np. jeśli jest jakiś "firmax" (w rzeczywistości na VPSie /home/firmax) to piszesz:

- /firmax

Cytat: gorus1 w Styczeń 18, 2019, 02:00:59 PM
jak też jakiś katalog już w samym w public_html ...
Da się coś takiego ustawić?

Nie, tego już się nie da...

Cytat: gorus1 w Styczeń 18, 2019, 02:00:59 PM
Ponadto to wszystkie te dane miały nieco powyżej 42 GB, ale strasznie długo to trwało tj. blisko 7 godzin

Jeśli używasz mojego algorytmu (rsync -r -t -p -o -g -v --progress --delete --modify-window=1 -l -H), to było to za pierwszym ściąganiem, teraz dane będą tylko aktualizowane

gorus1

#22
Kufel piwa poszedł na PW  :)
Odnośnie tego syntaxa to ten sam monit występuje zarówno z użyciem zmiennej "KLUCZ" jak i bez niej.
Natomiast
CytatEw. zmanipuluj odpowiednio $HOME/.ssh/config.
czy mógłbyś mi podpowiedzieć jak to zrobić, bo przyznam szczerze, że nie rozumiem o co chodzi?

Ponadto
CytatW tym miejscu wpisujesz po prostu zarejstrowanego usera (każda domena jest userem), np. jeśli jest jakiś "firmax" (w rzeczywistości na VPSie /home/firmax)
każda domena nie jest userem, a katalogiem w katalogu domains tego usera.
Jak już wcześniej pisałem - struktura katalogów jest taka:
/home/NAZWAUŻYTKOWNIKA/domains/NAZWADOMENY/public_html
więc wg. Twojej instrukcji musiałbym wpisać:
- /NAZWAUŻYTKOWNIKA/domains/NAZWADOMENY.PL
i tak też wpisuje, ale to nie działa (kopiuje się zawartość public_html tej domeny i nie wiem dlaczego?

TataPingu

#23
Zle mnie zrozumiałeś...
- pisałem USERA, a to to samo co wg. Ciebie NAZWAUŻYTKOWNIKA (wszystkie bezpośrednie katalogi pod /home/ to USERZY

Powinieneś to tak wyłączyć:

- /NAZWAUŻYTKOWNIKA

i tylko to !

A co do klucza, to musisz to sam "rozgryźć". Na pewno jest możliwe "zautomatyzowanie" procesu meldowania się na VPS. W sieci znajdziesz sporo na ten temat. Chętnie bym doradził, tylko nie znam OSa na ZYXELU, jego struktury itd. Musiałbym mieć bezpośredni dostęp do niego.


Ps - acha, i jeszcze jedno...
Gdy teraz zamkniesz którąś domenę, to już raz ściągnięte dane na ZYXELA musisz po prostu ręcznie zlikwidować...
- przy następnej aktualizacji nie będą ściągane...

gorus1

#24
Duże dzięki za pomoc - sporo mi pomogłeś.
Co do tego klucza to w międzyczasie rozgryzłem gdzie leży problem a mianowicie
Cytatdomyślnie katalog domowy użytkownika "root" jest ustawiony na /home , który znajduje się w wewnętrznej pamięci flash. Ta pamięć jest usuwana przy każdym ponownym uruchomieniu urządzenia
ale z tym to sobie sam jakoś poradzę, bo pewnie tu chodzi o hosty znane hosty, które też po restarcie są usuwane.
Dodam, że jeżeli nie ma restartu to ta prośba o potwierdzenie pojawia się tylko raz - potem już nie.
Co do samych komend rsync (kopie przyrostowe, różnicowe) to również jest sporo w sieci i sobie spróbuję z tym poradzić.
Jednak cały czas mam problem z tymi wyłączeniami tj. robię dokładnie tak jak piszesz tj.
- /NAZWAUŻYTKOWNIKA
ale niestety wszystkie public_html tego użytkownika i tak się kopiują.
P.S.
oczywiście usuwam # sprzed polecenia

TataPingu

#25
Cytat: gorus1 w Styczeń 18, 2019, 07:25:59 PM
Jednak cały czas mam problem z tymi wyłączeniami

Chmmm..., sam nie wiem...
- przy testach, które naprędce zrobiłem, wszystko było OK
Z tym, że testy robiłem lokalnie...

Spróbuj może tak:

- **/NAZWAUŻYTKOWNIKA

A co do ssh, to masz prawdopodobnie rację, to "znikający" root...
- ale to jest do ogarnięcia...

gorus1

CytatSpróbuj może tak:

- **/NAZWAUŻYTKOWNIKA
bingo - właśnie i to chodziło.
Natomiast wyżej pytałem, czy można wyłączyć jakiś katalog już w samym public_html jakiejś domeny i napisałeś:
CytatNie, tego już się nie da...
muszę zaprzeczyć, bo właśnie to przetestowałem i da się wyłączyć taki katalog - wystarczy go dopisać do ścieżki np.:
- **/NAZWAUŻYTKOWNIKA/domains/NAZWADOMENY/public_html/wp-admin
Jeszcze raz duże dzięki za pomoc. Teraz pozostało mi już tylko pobawić się ustawieniami samego rsync gdyż docelowo chcę ustawić go w taki sposób, aby robił kopie różnicowe trzymane przez 7 dni wstecz.

TataPingu

Cytat: gorus1 w Styczeń 19, 2019, 11:15:36 AM
muszę zaprzeczyć, bo właśnie to przetestowałem i da się wyłączyć taki katalog - wystarczy go dopisać do ścieżki np.:
- **/NAZWAUŻYTKOWNIKA/domains/NAZWADOMENY/public_html/wp-admin

No to nauczyłem się również czegoś nowego..

A tak gwoli informacji, jedna gwiazdka (*) oznacza "jeden pozim/katalog poniżej" (jeden katalog), dwie gwiazdki (**) "cała gałąź poniżej"

gorus1

#28
Duże dzięki za wszelkie pomoce - praktycznie dobrnąłem do końca poradziłem sobie również komunikatem o potwierdzeniu (syntax), ale utknąłem na ostatnim etapie całego przedsięwzięcia tj. na crontabie.
Gdybyś zechciał mi pomóc...
wpisuję takie przykładowe polecenie do crontaba:
48 11 * * * sh /i-data/beadda5d/root/.ssh/public_htmlbackup.sh > /dev/null 2>&1

i niby Twój log rejestruje jakieś ruchy
Dnia Sun Jan 20 11:48:01 CET 2019 backup domen rozpoczęty
Dnia Sun Jan 20 11:48:01 CET 2019 backup domen zakończony pomyślnie

ale w tym samy momencie co rozpoczęcie - następuje również zakończenie backupu i nic się nie kopiuje.
Oczywiście jak ręcznie uruchamiam skrypt to wszystko jest ok.
Nie wiem czy chodzi o jakieś prawa czy o coś innego stąd moja prośba o pomoc.
Dodam, że ustawiłem skrypt, aby  był wykonywalny komendą
chmod +x /sciezka/do/skrypt.sh

TataPingu

#29
Cytat: gorus1 w Styczeń 20, 2019, 11:56:13 AM
......................

Skrypt uruchamiany musi być z roota, np. poniższy syntax regularnie bootuje PCta o godz. 4:00


##------------REGULARNY REBOOT-----------------
5 4 * * * root /sbin/reboot
## Restart o godz 4:00
##------------REGULARNY REBOOT-----------------


Czy np. poniższy, regularnie, co 7 minut uruchamia skrypt poversaver.sh


*/7 * * * * root /usr/local/bin/powersaver.sh

Zobacz najnowsze wiadomości na forum