M-am uitat la asta câteva ore bune, se pare că metoda sd_bus_start a fost modificat pentru a include verificări suplimentare. Nu am reușit să restrâng ce altceva caută, totuși am reușit să găsesc o soluție mai elegantă pentru a îndeplini aceeași sarcină folosind comenzi systemctl de la distanță în loc să montez toate directoarele de pe gazdă.
Sistem la distanțăctl
systemctl
acceptă comenzi de la distanță prin intermediul --gazdă / -H
steag. Utilizează ssh pentru a se conecta la gazda de la distanță, așa că va fi necesară o pereche de chei ssh. Deoarece controlăm gazda pe care ne aflăm, acest lucru este destul de simplu de configurat.
Comanda Docker (sau Kubernetes arg)
Iată comanda completă care poate fi utilizată, voi descompune fiecare parte mai jos. Ipotezele containerului sunt că are systemctl
și ssh
instalat, containerul rulează în rețeaua gazdă și că rădăcină
directorul principal al contului este montat (puteți folosi o altă utilizare dacă doriți).
(ls ~/.ssh/id_rsa || ssh-keygen -b 2048 -t rsa -f ~/.ssh/id_rsa -q -N "")
&& (grep -qxF $(cat ~/.ssh/id_rsa.pub) ~/.ssh/authorized_keys || echo $(cat ~/.ssh/id_rsa.pub) > ~/.ssh/authorized_keys)
&& (grep -qxF „StrictHostKeyChecking nu” ~/.ssh/config || echo „StrictHostKeyChecking nu” >> ~/.ssh/config)
&& (grep -qxF "UserKnownHostsFile /dev/null" ~/.ssh/config || echo "UserKnownHostsFile /dev/null" >> ~/.ssh/config)
&& systemctl -H [email protected] pornește nfs-server.service
Această comandă vede dacă ~/.ssh/id_rsa
fișierul există, altfel creați unul.
(ls ~/.ssh/id_rsa || ssh-keygen -b 2048 -t rsa -f ~/.ssh/id_rsa -q -N "")
Acum adăugăm cheia noastră publică la cheile noastre autorizate dacă nu există deja în fișier.
(grep -qxF "$(cat ~/.ssh/id_rsa.pub)" ~/.ssh/authorized_keys || echo "$(cat ~/.ssh/id_rsa.pub)" > ~/.ssh/authorized_keys)
Acest lucru poate fi, probabil, mai sigur dacă îl puneți într-o secțiune din configurația ssh numai pentru 127.0.0.1
, dar avem nevoie
(grep -qxF "StrictHostKeyChecking nu" ~/.ssh/config || echo "StrictHostKeyChecking nu" >> ~/.ssh/config)
&& (grep -qxF "UserKnownHostsFile /dev/null" ~/.ssh/config || echo "UserKnownHostsFile /dev/null" >> ~/.ssh/config)
În sfârșit avem realitatea systemctl
comanda. Observați -H [email protected]
.
systemctl -H [email protected] porniți nfs-server.service
Pentru securitate maximă, cel mai bine ar fi să setați mai întâi cheile și utilizatorii în afara containerelor (prin Ansible sau similar) și să permiteți numai systemctl -H
comandă în interiorul containerului.