cd ~ #Your home directory
ssh-keygen -t rsa #Press enter for all values
Dla Windowsa
(Działa tylko, jeśli program zatwierdzania jest w stanie używać certyfikatów / prywatnych i publicznych kluczy ssh)
Użyj Putty Gen, aby wygenerować klucz
Wyeksportuj klucz jako otwarty klucz SSH
Oto przewodnik na temat putty gen dla powyższych kroków
2. Powiąż klucz SSH ze zdalnym repozytorium
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.pubdo 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:
Dzięki. Czy możesz wyjaśnić, co robi polecenie config? Zastanawiam się, dlaczego nawet nie pyta mnie o hasło przy pierwszym uruchomieniu repo.
HelloWorldNoMore
1
@vivoconunxino Prawdopodobnie dlatego, że jest z natury niebezpieczny. Z strony gitpodręcznika: „Korzystanie z tego pomocnika spowoduje przechowywanie haseł w postaci niezaszyfrowanej na dysku, chronionej tylko uprawnieniami systemu plików”.
cmaster
15
W tej odpowiedzi brakuje ostrzeżenia o storepomocniku poświadczającym przechowującym hasło na dysku w postaci niezaszyfrowanej.
Właśnie to rozwiązało mój problem po git initlokalnym użyciu, a następnie próbie wypchnięcia po dodaniu pilota z nowego repozytorium na stronie GitHub.
sheldonkreger
1
Nie jestem pewien, dlaczego nie jest to część przyjętej odpowiedzi. Dzięki!
spacer
1
Akceptowana odpowiedź powinna składać się z faktycznie zaakceptowanej odpowiedzi PLUS tej.
Puce
3
Możesz pominąć „git + ssh: //” i po prostu użyj[email protected]/username/reponame.git
Ivan Shulev
1
@IvanShulev Próbowałem początkowo bez git + ssh i nie zadziałało
Antonello,
40
Wystarczy użyć --repoopcji polecenia git push. Lubię to:
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.
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]
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.
Użyłem odpowiedzi, którą zasugerował Pavel i zadziałała dla mnie. Moją różnicą było to zrobić, gdy dodawałem pilota tak:git remote add (alias) https://(name:password)@github.com/(the remote address).git
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);
Przejdź do lokalnego repozytorium i zaktualizuj pilota przez git remote set-url origin git+ssh://[email protected]/username/reponame.git- możesz to najpierw sprawdzić git remote -v);
Proszę, touch t; git add t; git commit -m "test"; git pushpotwierdź, aby cieszyć się światem bez hasła .
passwd SZYFROWANE za pomocą magazynu kluczy
Jeśli użyjesz tak, git config --global credential.helper storejak wspomniano wcześniej, Twoje niezaszyfrowane hasła będą przechowywane w postaci zwykłego tekstu, pod ~/.git-credentialsktó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://[email protected]/username/reponame.git.
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 originjest Twoją lokalną nazwą dla zdalnego repozytorium, użyj tego polecenia
--pushFlag Gwarantuje to zmienia adres URL repozytorium dla git pushtylko polecenia. (Pytanie zadane w pierwotnym poście dotyczy git pushtylko 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ł --amendwcześ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 pushale 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 pushprzez przypadek.)
co jeśli hasło ma @, to łamie polecenie myśląc hasło po @ jako część serwera git?
Pranav Singh,
Jeśli twoje hasło zawiera „@”, jesteś tutaj sam, przepraszam. Możesz zmienić hasło?
radfast
Potrzebuję zgłosić prośbę o zmianę hasła, ponieważ przeprowadzałem automatyzację ciągłej integracji z kontem serwisowym (nie osobistym). W tej chwili używane klucze SSH do bezpiecznego logowania
Pranav Singh
1
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
napisał hasło w git zdalne pochodzenie. Wpisz „git remote -v”, aby zobaczyć uszkodzenia. Popraw to, ustawiając adres URL zdalnego źródła bez hasła. „git remote set_url origin http: // {myuser} @ {my_repo_ip_address} / {myrepo_name.git}”
zapisał hasło w .git / logs w repozytorium. Zamień wszystkie instancje pwd za pomocą komendy unix, np. Find .git / logs -exec sed -i 's / {my_url_with_pwd} // g' {} \; Tutaj {my_url_with_pwd} to adres URL z hasłem. Ponieważ adres URL zawiera ukośniki, musi być poprzedzony dwoma ukośnikami. Na przykład dla adresu URL http: // kris: [email protected]/proj.git -> http: \\ / \\ / kris: [email protected] \\ / proj.git
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.
Musisz skonfigurować klucz prywatny SSH, możesz przejrzeć tę stronę , jak przeprowadzić konfigurację na Macu, jeśli jesteś na Linuksie przewodnik powinien być prawie taki sam, w systemie Windows potrzebujesz narzędzia takiego jak MSYS .
Wydaje się, że przynajmniej podczas korzystania z TortoiseGIT w systemie Windows możliwe jest utworzenie kluczy SSH i przesłanie ich na serwer GIT przy użyciu:
Odpowiedzi:
1. Wygeneruj klucz SSH
Linux / Mac
Otwórz terminal, aby utworzyć klucze ssh:
Dla Windowsa
(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
2. Powiąż klucz SSH ze zdalnym repozytorium
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
3. Ustaw zdalny adres URL na formularz, który obsługuje SSH 1
Jeśli wykonałeś powyższe kroki i nadal pojawia się monit o hasło, upewnij się, że adres URL repozytorium jest w formie
w przeciwieństwie do
Aby zobaczyć adres URL repozytorium, uruchom:
Możesz zmienić adres URL za pomocą:
[1] Ta sekcja zawiera odpowiedź Erica P.
źródło
git remote set-url origin [email protected]:/username/projectname.git
Trwałe uwierzytelnianie za pomocą repozytoriów Git,
Uruchom następujące polecenie, aby włączyć buforowanie referencji.
Opcja powinna również określać wygasanie buforowania ,
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.
źródło
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
w przeciwieństwie do
Aby zobaczyć adres URL repozytorium, uruchom:
Możesz zmienić adres URL za pomocą
git remote set-url
:źródło
git init
lokalnym użyciu, a następnie próbie wypchnięcia po dodaniu pilota z nowego repozytorium na stronie GitHub.[email protected]/username/reponame.git
Wystarczy użyć
--repo
opcji polecenia git push. Lubię to:źródło
git remote set-url origin https://name:[email protected]/repo.git
[email protected]/....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
rozszerzeniaOszczędzanie na czas nieokreślony
Możesz użyć sklepu git-credential-store przez
który przechowuje twoje hasło niezaszyfrowane w systemie plików :
Z limitem czasu
Użyj pamięci podręcznej git-credential-cache, która domyślnie przechowuje hasło przez 15 minut.
aby ustawić inny limit czasu, użyj
--timeout
(tutaj 5 minut)Bezpieczne zapisywanie w nieskończoność (OS X i Windows)
źródło
credential.helper cache
NIE działa. Powinno byćgit config --global credential.helper wincred
.Korzystałem z linku https (
https://github.com/org/repo.git
) zamiast linku ssh;Przełączanie rozwiązało problem dla mnie!
źródło
Krok 1 -
Utwórz klucze SSH w systemie Linux za pomocą poniższego polecenia
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
Krok 4 -
Teraz dodaj zdalny adres URL [email protected]: nazwa_użytkownika / nazwa_profilu.git do lokalnego repozytorium git przy użyciu poniższej komendy.
Otóż to.
źródło
Podłącz klienta git do magazynu danych logowania systemu operacyjnego. Na przykład w systemie Windows przypisujesz pomocnika poświadczeń do wincred:
Czy istnieje sposób na pominięcie wpisywania hasła podczas korzystania z https: // w GitHub?
źródło
W systemie operacyjnym Windows użyj tego zamiast tego, to działa dla mnie:
na przykład
źródło
Chciałem tylko kilka razy wspomnieć o wyżej wspomnianym rozwiązaniu:
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.
źródło
Użyłem odpowiedzi, którą zasugerował Pavel i zadziałała dla mnie. Moją różnicą było to zrobić, gdy dodawałem pilota tak:
git remote add (alias) https://(name:password)@github.com/(the remote address).git
źródło
Uruchomienie poniższego polecenia rozwiązało problem.
Zapoznaj się z poniższą dokumentacją github:
źródło
O ile mi wiadomo, istnieją po prostu dwa bezpieczne sposoby: szyfrowanie ssh lub passwd przy użyciu magazynu kluczy .
SSH
cat ~/.ssh/id_rsa.pub
, wklej go tam, nazwij i zapisz (jeśli nie masz takiego pliku, wygeneruj go dla siebiessh-keygen -t rsa
- wystarczy wpisać Enter dla wszystkich monitów);git remote set-url origin git+ssh://[email protected]/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 .passwd SZYFROWANE za pomocą magazynu kluczy
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
źródło
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
źródło
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--push
Flag Gwarantuje to zmienia adres URL repozytorium dlagit push
tylko polecenia. (Pytanie zadane w pierwotnym poście dotyczygit 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 razemgit push
, więc nie mogęgit push
przez przypadek.)źródło
@
, 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
źródło
Musisz skonfigurować klucz prywatny SSH, możesz przejrzeć tę stronę , jak przeprowadzić konfigurację na Macu, jeśli jesteś na Linuksie przewodnik powinien być prawie taki sam, w systemie Windows potrzebujesz narzędzia takiego jak MSYS .
źródło
Wydaje się, że przynajmniej podczas korzystania z TortoiseGIT w systemie Windows możliwe jest utworzenie kluczy SSH i przesłanie ich na serwer GIT przy użyciu:
źródło