Pracuję git push
w zdalnym repozytorium Git.
Każdy push
poprosi mnie o wpisanie username
i password
. Chciałbym tego uniknąć przy każdym wypychaniu, ale jak skonfigurować, aby tego uniknąć?
Pracuję git push
w zdalnym repozytorium Git.
Każdy push
poprosi mnie o wpisanie username
i password
. Chciałbym tego uniknąć przy każdym wypychaniu, ale jak skonfigurować, aby tego uniknąć?
Odpowiedzi:
Otwórz terminal, aby utworzyć klucze ssh:
cd ~ #Your home directory
ssh-keygen -t rsa #Press enter for all values
(Działa tylko, jeśli program zatwierdzania jest w stanie używać certyfikatów / prywatnych i publicznych kluczy ssh)
Oto przewodnik na temat putty gen dla powyższych kroków
Ten krok różni się w zależności od konfiguracji pilota.
Jeśli jest to repozytorium GitHub i masz uprawnienia administracyjne, przejdź do ustawień i kliknij „dodaj klucz SSH”. Skopiuj zawartość ~/.ssh/id_rsa.pub
do pola oznaczonego „Klucz”.
Jeśli Twoje repozytorium jest administrowane przez kogoś innego, daj administratorowi swój id_rsa.pub
.
Jeśli twoje zdalne repozytorium jest zarządzane przez twoje, możesz użyć tego polecenia na przykład:
scp ~/.ssh/id_rsa.pub YOUR_USER@YOUR_IP:~/.ssh/authorized_keys/id_rsa.pub
Jeśli wykonałeś powyższe kroki i nadal pojawia się monit o hasło, upewnij się, że adres URL repozytorium jest w formie
git+ssh://git@github.com/username/reponame.git
w przeciwieństwie do
https://github.com/username/reponame.git
Aby zobaczyć adres URL repozytorium, uruchom:
git remote show origin
Możesz zmienić adres URL za pomocą:
git remote set-url origin git+ssh://git@github.com/username/reponame.git
[1] Ta sekcja zawiera odpowiedź Erica P.
git remote set-url origin git@github.com:/username/projectname.git
Uruchom następujące polecenie, aby włączyć buforowanie referencji.
$ git config credential.helper store
$ git push https://github.com/repo.git
Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>
Opcja powinna również określać wygasanie buforowania ,
git config --global credential.helper 'cache --timeout 7200'
Po włączeniu buforowania poświadczeń będzie ono buforowane przez 7200 sekund (2 godziny) .
Uwaga: Pomocnik poświadczeń przechowujący niezaszyfrowane hasło na dysku lokalnym.
git
podręcznika: „Korzystanie z tego pomocnika spowoduje przechowywanie haseł w postaci niezaszyfrowanej na dysku, chronionej tylko uprawnieniami systemu plików”.
store
pomocniku poświadczającym przechowującym hasło na dysku w postaci niezaszyfrowanej.
git config --unset credential.helper
Jeśli masz już skonfigurowane klucze SSH i nadal pojawia się monit o hasło, upewnij się, że adres URL repozytorium jest w formie
git+ssh://git@github.com/username/reponame.git
w przeciwieństwie do
https://github.com/username/reponame.git
Aby zobaczyć adres URL repozytorium, uruchom:
git remote show origin
Możesz zmienić adres URL za pomocą git remote set-url
:
git remote set-url origin git+ssh://git@github.com/username/reponame.git
git init
lokalnym użyciu, a następnie próbie wypchnięcia po dodaniu pilota z nowego repozytorium na stronie GitHub.
git@github.com/username/reponame.git
Wystarczy użyć --repo
opcji polecenia git push. Lubię to:
$ git push --repo https://name:password@bitbucket.org/name/repo.git
git remote set-url origin https://name:password@github.com/repo.git
name@github.com/....git
działa, jeśli nie przeszkadza ci hasło za każdym razem.
git push --repo https://github.com/Username/repo
Działa bez .git
rozszerzenia
Możesz użyć sklepu git-credential-store przez
git config credential.helper store
który przechowuje twoje hasło niezaszyfrowane w systemie plików :
Korzystanie z tego pomocnika będzie przechowywać hasła niezaszyfrowane na dysku, chronione tylko przez uprawnienia systemu plików. Jeśli nie jest to akceptowalny kompromis w zakresie bezpieczeństwa, spróbuj git-credential-cache lub znajdź pomocnika, który integruje się z bezpieczną pamięcią zapewnianą przez twój system operacyjny.
Użyj pamięci podręcznej git-credential-cache, która domyślnie przechowuje hasło przez 15 minut.
git config credential.helper cache
aby ustawić inny limit czasu, użyj --timeout
(tutaj 5 minut)
git config credential.helper 'cache --timeout=300'
- Jeśli używasz komputera Mac, Git ma tryb „osxkeychain” , który buforuje poświadczenia w bezpiecznym pęku kluczy dołączonym do konta systemowego. Ta metoda przechowuje poświadczenia na dysku i nigdy nie wygasają, ale są one szyfrowane za pomocą tego samego systemu, który przechowuje certyfikaty HTTPS i autouzupełnianie Safari. Uruchomienie następuje w wierszu poleceń będzie włączyć tę funkcję:
git config --global credential.helper osxkeychain
. Musisz również przechowywać dane uwierzytelniające w pęku kluczy przy użyciu aplikacji pęku kluczy.- Jeśli używasz systemu Windows, możesz zainstalować pomocnika o nazwie „Git Credential Manager dla systemu Windows”. Jest to podobne do opisanego powyżej pomocnika „osxkeychain”, ale używa Windows Credential Store do kontrolowania poufnych informacji. Można go znaleźć pod adresem https://github.com/Microsoft/Git-Credential-Manager-for-Windows . [podkreśla moje]
credential.helper cache
NIE działa. Powinno być git config --global credential.helper wincred
.
Krok 1 -
Utwórz klucze SSH w systemie Linux za pomocą poniższego polecenia
ssh-keygen -t rsa -b 4096 -C "your_email"
Poprosi o podanie hasła i nazwy pliku (domyślnie będzie to ~ / .ssh / id_rsa, ~ / .ssh / id_rsa.pub)
Krok 2 -
Po utworzeniu plików dodaj klucz publiczny id_rsa.pub do sekcji ssh konta github.
Krok 3 -
Na swoim komputerze dodaj klucz prywatny id_rsa do ssh-agent za pomocą poniższej komendy
ssh-add ~/.ssh/id_rsa
Krok 4 -
Teraz dodaj zdalny adres URL git@github.com: nazwa_użytkownika / nazwa_profilu.git do lokalnego repozytorium git przy użyciu poniższej komendy.
git remote remove origin
git remote add origin git@github.com:user_name/repo_name.git
Otóż to.
Podłącz klienta git do magazynu danych logowania systemu operacyjnego. Na przykład w systemie Windows przypisujesz pomocnika poświadczeń do wincred:
git config --global credential.helper wincred
Czy istnieje sposób na pominięcie wpisywania hasła podczas korzystania z https: // w GitHub?
W systemie operacyjnym Windows użyj tego zamiast tego, to działa dla mnie:
https://{Username}:{Password}@github.com/{Username}/{repo}.git
na przykład
git clone https://{Username}:{Password}@github.com/{Username}/{repo}.git
git pull https://{Username}:{Password}@github.com/{Username}/{repo}.git
git remote add origin https://{Username}:{Password}@github.com/{Username}/{repo}.git
git push origin master
Chciałem tylko kilka razy wspomnieć o wyżej wspomnianym rozwiązaniu:
git config credential.helper store
Po tym można użyć dowolnego polecenia wymagającego hasła. Nie musisz naciskać. (możesz też na przykład wyciągnąć). Następnie nie będziesz musiał ponownie wpisywać nazwy użytkownika / hasła.
O ile mi wiadomo, istnieją po prostu dwa bezpieczne sposoby: szyfrowanie ssh lub passwd przy użyciu magazynu kluczy .
cat ~/.ssh/id_rsa.pub
, wklej go tam, nazwij i zapisz (jeśli nie masz takiego pliku, wygeneruj go dla siebie ssh-keygen -t rsa
- wystarczy wpisać Enter dla wszystkich monitów);git remote set-url origin git+ssh://git@github.com/username/reponame.git
- możesz to najpierw sprawdzić git remote -v
);touch t; git add t; git commit -m "test"; git push
potwierdź, aby cieszyć się światem bez hasła .Jeśli użyjesz tak, git config --global credential.helper store
jak wspomniano wcześniej, Twoje niezaszyfrowane hasła będą przechowywane w postaci zwykłego tekstu, pod ~/.git-credentials
którym nie jest to bezpieczne, jak się wydaje.
Spróbuj zaszyfrować jako
sudo apt-get install libgnome-keyring-dev
sudo make --directory=/usr/share/doc/git/contrib/credential/gnome-keyring
git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring
git config --global credential.helper store
W takim przypadku używasz
https://git@github.com/username/reponame.git
.
Moje rozwiązanie w systemie Windows:
ssh-keygen -t rsa
(Naciśnij Enter, aby wyświetlić wszystkie wartości)Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
Jeśli Twój komputer jest bezpieczny lub nie obchodzi Cię bezpieczeństwo hasła, możesz to osiągnąć w bardzo prosty sposób. Zakładając, że zdalne repozytorium znajduje się na GitHub i origin
jest Twoją lokalną nazwą dla zdalnego repozytorium, użyj tego polecenia
git remote set-url --push origin https://<username>:<password>@github.com/<repo>
--push
Flag Gwarantuje to zmienia adres URL repozytorium dla git push
tylko polecenia. (Pytanie zadane w pierwotnym poście dotyczy git push
tylko polecenia. Wymaganie nazwy użytkownika + hasła tylko do operacji wypychania to normalna konfiguracja publicznych repozytoriów w GitHub. Pamiętaj, że prywatne repozytoria w GitHub również wymagałyby nazwy użytkownika + hasła do operacji ściągania i pobierania , więc w przypadku prywatnego repozytorium nie chcesz używać --push flag
...)
OSTRZEŻENIE: Jest to z natury niebezpieczne, ponieważ:
Twój dostawca usług internetowych lub ktokolwiek logujący się do Twojej sieci uzyskuje dostęp, może łatwo zobaczyć hasło w postaci zwykłego tekstu w adresie URL;
każdy, kto uzyska dostęp do komputera, może wyświetlić Twoje hasło za pomocą git remote show origin
.
Dlatego użycie klucza SSH jest akceptowaną odpowiedzią.
Nawet klucz SSH nie jest całkowicie bezpieczny . Każdy, kto uzyska dostęp do twojego komputera, może na przykład wykonywać wypychania, które niszczą twoje repozytorium lub, co gorsza, zatwierdza wypychanie, dokonując subtelnych zmian w kodzie. (Wszystkie wypychane zatwierdzenia są oczywiście bardzo widoczne na GitHub. Ale jeśli ktoś chciałby ukradkiem zmienić kod, mógł --amend
wcześniej zatwierdzić bez zmiany komunikatu zatwierdzenia, a następnie wymusić jego wypchnięcie. Byłoby to podstępne i dość trudne do zauważenia w praktyce. )
Ale ujawnienie hasła jest gorsze . Jeśli atakujący pozna twoją nazwę użytkownika i hasło, może zrobić takie rzeczy, jak zablokowanie cię z własnego konta, usunięcie konta, trwałe usunięcie repozytorium itp.
Alternatywnie - dla uproszczenia i bezpieczeństwa - możesz podać tylko swoją nazwę użytkownika w adresie URL, dzięki czemu będziesz musiał wpisać hasło za każdym razem, git push
ale nie będziesz musiał podawać swojej nazwy za każdym razem. (Bardzo podoba mi się to podejście, konieczność wpisania hasła daje mi przerwę na myślenie za każdym razem git push
, więc nie mogę git push
przez przypadek.)
git remote set-url --push origin https://<username>@github.com/<repo>
@
, to łamie polecenie myśląc hasło po @ jako część serwera git?
Wszystko to powstaje, ponieważ git nie udostępnia opcji w komendach klonowania / ciągnięcia / wypychania / pobierania, aby wysłać poświadczenia przez potok. Chociaż daje credential.helper, przechowuje w systemie plików lub tworzy demona itp. Często poświadczenia GIT są na poziomie systemu, a obowiązkiem zapewnienia ich bezpieczeństwa jest aplikacja wywołująca polecenia git. Rzeczywiście bardzo niebezpieczne.
Oto, co musiałem obejść. 1. Wersja Git (git --version) powinna być większa lub równa 1.8.3.
KLON GIT
Do klonowania użyj „git clone URL” po zmianie adresu URL z formatu http: // {myuser} @ {my_repo_ip_address} / {myrepo_name.git} na http: // {myuser}: {mypwd} @ {my_repo_ip_address} /{myrepo_name.git}
Następnie wyczyść repozytorium hasła, jak w następnej sekcji.
BIEGUNKA
Teraz by to poszło i
Jeśli aplikacja używa Java do wydawania tych poleceń, użyj ProcessBuilder zamiast Runtime. Jeśli musisz użyć Runtime, użyj getRunTime (). Exec, który przyjmuje tablicę String jako argumenty z / bin / bash i -c jako argumenty, a nie argument, który przyjmuje pojedynczy String jako argument.
GIT FETCH / PULL / PUSH