Mam programistyczny serwer git, który wdraża się na serwerze działającym, gdy live
gałąź jest przekazywana. Każdy użytkownik ma swój login i dlatego post-receive
hak, który wykonuje wdrożenie na żywo, jest uruchamiany pod własnym użytkownikiem.
Ponieważ nie chcę utrzymywać kluczy publicznych użytkowników jako kluczy autoryzowanych na zdalnym serwerze na żywo, stworzyłem zestaw kluczy, które „należą do systemu git w celu dodania do zdalnych serwerów na żywo (w post-receive
haku używam $GIT_SSH
aby ustawić klucz prywatny z -i
opcją).
Mój problem polega na tym, że ze względu na to, że wszyscy użytkownicy mogą chcieć wdrożyć na żywo, klucz prywatny systemu git musi być co najmniej czytelny dla grupy, a SSH naprawdę tego nie lubi.
Oto próbka błędu:
XXXX@XXXX /srv/git/identity % ssh -i id_rsa XXXXX@XXXXX
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0640 for 'id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: id_rsa
Rozejrzałem się dookoła, oczekując, że znajdę coś, co zmusiłoby ssh do przejścia przez połączenie, ale nie znalazłem nic prócz ludzi ślepo mówiących, że po prostu nie powinieneś pozwalać na dostęp do niczego oprócz jednego użytkownika.
źródło
Ci MOŻE używać do odczytu dla grupy plików tożsamości, chyba że jesteś właścicielem klucza. Więc po prostu ustaw plik tożsamości, który ma być własnością, na przykład użytkownik root, a następnie wszyscy użytkownicy repozytorium git są gotowi do pracy.
Zaletą tego jest to, że nie potrzebujesz sudo - rozwiązanie będzie prostsze.
Zauważ, że to ponownie napotka oryginalny problem, jeśli używasz roota do wypychania repozytorium git.
źródło
Klucz prywatny musi pozostać prywatny. Nie powinieneś pozwalać nikomu go czytać.
w
post-receive
skrypcie przechwytującym spróbuj czegoś takiego:źródło
ssh-keygen
,ssh-copy-id user@prod
. Na prod:chmod 700 ~/.ssh
,chmod 600 ~/.ssh/authorized_keys
.git checkout...
(w prod).post-receive
Hak (maszyna dev) prowadzony jest przez użytkownika, który naciska na zmianę (a więc za zgodą użytkowników), więc będą one mieć różne klucze, nie mogę pomóc, które użytkownik będzie. Wpost-receive
akcji działają dwa zaczepy na dwóch różnych serwerach.