Piszę to dla tych, którzy dopiero zaczynają korzystać z Git i BitBucket w systemie Windows i nie są tak zaznajomieni z Bash (ponieważ jest to zarówno częsty problem, jak i wysoki wynik Google podczas wyszukiwania komunikatu o błędzie w pytaniu).
Dla tych, którzy nie mają nic przeciwko HTTPS i szukają szybkiego rozwiązania, przewiń do końca tej odpowiedzi, aby uzyskać instrukcje w sekcji FOR THE LAZY
Dla tych, którzy chcą rozwiązać rzeczywisty problem, postępuj zgodnie z poniższymi instrukcjami:
Naprawianie problemu SSH tak szybko, jak to możliwe
To jest zestaw instrukcji pochodzących z adresu URL, do którego prowadzi VonC. Został zmodyfikowany, aby był jak najbardziej elastyczny i zwięzły.
Nie wpisuj $
ani żadnych linii, które nie zaczynają się od $
( $
oznacza to, że jest to coś, co wpisujesz w GitBash).
Otwórz GitBash
Ustaw informacje globalne, jeśli jeszcze tego nie zrobiłeś:
$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"
Sprawdź OpenSSH:
$ ssh -v localhost
OpenSSH_4.6p1, OpenSSL...
Widzisz coś takiego?
- Tak: kontynuuj.
- Nie: Przejdź do sekcji FOR THE LAZY lub postępuj zgodnie z połączonym artykułem z VonC.
Sprawdź, czy wygenerowałeś już klucze:
$ ls -a ~/.ssh/id_*
Jeśli są dwa pliki, możesz pominąć następny krok.
$ ssh-keygen
Pozostaw wszystko jako domyślne, wprowadź hasło. Powinieneś teraz zobaczyć wyniki z tym poleceniem:
$ ls -a ~/.ssh/id_*
Sprawdź, czy istnieje plik konfiguracyjny:
$ ls -a ~/.ssh/config
Jeśli otrzymasz wynik, sprawdź ten plik pod kątem błędnych informacji. Jeśli żaden plik nie istnieje, wykonaj następujące czynności:
$ echo "Host bitbucket.org" >> ~/.ssh/config
$ echo " IdentityFile ~/.ssh/id_rsa" >> ~/.ssh/config
Potwierdź zawartość:
$ cat ~/.ssh/config
Host bitbucket.org
IdentityFile ~/.ssh/id_rsa
- Wymagana jest pojedyncza spacja przed „IdentityFile”.
Sprawdź, czy uruchamiasz agenta SSH za każdym razem, gdy uruchamiasz GitBash:
$ cat ~/.bashrc
- Jeśli widzisz wywołaną funkcję
start_agent
, ten krok został już zakończony.
- Jeśli nie ma pliku, kontynuuj.
- Jeśli istnieje plik, który nie zawiera tej funkcji, jesteś w trudnej sytuacji. Prawdopodobnie jest to bezpieczne, aby dołączyć do niego (korzystając z poniższych instrukcji), ale może nie być! Jeśli nie jesteś pewien, zrób kopię zapasową swojego .bashrc przed wykonaniem poniższych instrukcji lub przejdź od razu do sekcji FOR THE LAZY .
Wprowadź następujące informacje do GitBash, aby utworzyć plik .bashrc:
$ echo "SSH_ENV=$HOME/.ssh/environment" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "# start the ssh-agent" >> ~/.bashrc
$ echo "function start_agent {" >> ~/.bashrc
$ echo " echo \"Initializing new SSH agent...\"" >> ~/.bashrc
$ echo " # spawn ssh-agent" >> ~/.bashrc
$ echo " /usr/bin/ssh-agent | sed 's/^echo/#echo/' > \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo " echo succeeded" >> ~/.bashrc
$ echo " chmod 600 \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo " . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo " /usr/bin/ssh-add" >> ~/.bashrc
$ echo "}" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "if [ -f \"\${SSH_ENV}\" ]; then" >> ~/.bashrc
$ echo " . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo " ps -ef | grep \${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {" >> ~/.bashrc
$ echo " start_agent;" >> ~/.bashrc
$ echo " }" >> ~/.bashrc
$ echo "else" >> ~/.bashrc
$ echo " start_agent;" >> ~/.bashrc
$ echo "fi" >> ~/.bashrc
Sprawdź, czy plik został utworzony pomyślnie (Twój powinien różnić się tylko miejscem, w którym pojawia się „twoja nazwa użytkownika”):
$ cat ~/.bashrc
SSH_ENV=/c/Users/yourusername/.ssh/environment
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
/usr/bin/ssh-add
}
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
- Zamknij GitBash i otwórz go ponownie.
- Powinieneś zostać poproszony o podanie hasła (dla pliku SSH, który wygenerowałeś wcześniej).
- Jeśli nie ma monitu, albo nie ustawiłeś hasła, albo GitBash nie uruchamia skryptu .bashrc (co byłoby dziwne, więc rozważ przejrzenie jego zawartości!). Jeśli używasz tego na komputerze Mac (OS X),
.bashrc
nie jest wykonywane domyślnie - .bash_profile
jest. Aby to naprawić, umieść ten fragment w swoim .bash_profile
:[[ -s ~/.bashrc ]] && source ~/.bashrc
Gdybyś nie wpisał hasła, zobaczyłbyś coś takiego podczas uruchamiania GitBash:
Initializing new SSH agent...
succeeded
Identity added: /c/Users/yourusername/.ssh/id_rsa (/c/Users/yourusername/.ssh/id_rsa)
A następujące wyniki powinny zwrócić wyniki:
$ ssh-add -l
Jeśli jednak uzyskasz następujące informacje od ssh-add -l
:
Could not open a connection to your authentication agent.
Nie stworzył agenta SSH, a przyczyną jest prawdopodobnie plik .bashrc.
Jeśli podczas uruchamiania GitBash zobaczysz to:
Initializing new SSH agent...
sh.exe": : No such file or directory
Oznacza to, że zapomniałeś wyjść z znaku $ za pomocą \ podczas echa do pliku (tj. Zmienne zostały rozwinięte). Utwórz ponownie plik .bashrc, aby rozwiązać ten problem.
Sprawdź, czy agent działa, a klucze zostały dodane:
$ ssh-add -l
Powinien zwrócić coś podobnego do tego:
2048 0f:37:21:af:1b:31:d5:cd:65:58:b2:68:4a:ba:a2:46 /Users/yourusername/.ssh/id_rsa (RSA)
Uruchom następujące polecenie, aby uzyskać swój klucz publiczny:
$ cat ~/.ssh/id_rsa.pub
(powinno zwrócić coś zaczynającego się od „ssh-rsa ......”
- Kliknij ikonę okna GitBash
- Kliknij Edytuj
- Kliknij Zaznacz
- Podświetl klucz publiczny za pomocą myszy (w tym
ssh-rsa
początkowy i końcowy == youremail@yourdomain.com
bit)
- Kliknij prawym przyciskiem myszy okno (wykonuje kopię)
- Wklej swój klucz publiczny do Notatnika.
- Usuń wszystkie znaki nowej linii, tak aby była to tylko jedna linia.
- Naciśnij,
CTRL+A
a następnie, CTRL+C
aby ponownie skopiować klucz publiczny do schowka.
Skonfiguruj swój klucz prywatny za pomocą BitBucket, wykonując następujące czynności:
- Otwórz przeglądarkę i przejdź do witryny BitBucket.org
- Zaloguj się do BitBucket.org
- Kliknij swój awatar (w prawym górnym rogu)
- Kliknij Zarządzaj kontem
- Kliknij Klucze SSH (w sekcji Bezpieczeństwo w menu po lewej stronie)
- Kliknij Dodaj klucz
- Wpisz
Global Public Key
etykietę
- Wklej klucz publiczny skopiowany z Notatnika
Global Public Key
Wpis powinien być teraz widoczny na liście kluczy.
- Wróć do GitBash
- cd do katalogu zawierającego twój projekt
- Zmień pochodzenie na odmianę SSH (nie będzie, jeśli wykonałeś kroki FOR THE LAZY )
Sprawdź swoje piloty:
$ git remote -v
Przełącz się na URL SSH:
$ git remote set-url origin git@bitbucket.org:youraccount/yourproject.git
Sprawdź, czy wszystko działa:
$ git remote show origin
Powinieneś zobaczyć coś takiego:
Warning: Permanently added the RSA host key for IP address '...' to the list of known hosts.
* remote origin
Fetch URL: git@bitbucket.org:youruser/yourproject.git
Push URL: git@bitbucket.org:youruser/yourproject.git
HEAD branch: master
Remote branch:
master tracked
Local ref configured for 'git push':
master pushes to master (fast-forwardable)
GOTOWE!
Możesz zdecydować się na użycie HTTPS zamiast SSH. Będzie wymagać wpisania hasła podczas operacji zdalnych (jest buforowane tymczasowo po jednokrotnym wpisaniu). Oto jak możesz skonfigurować HTTPS:
DLA LAZY
Powinieneś rozwiązać problem z SSH zgodnie z opisem VonC; Jednakże, jeśli jesteś w pośpiechu, aby popełnić i nie mają narzędzi / czas / wiedzę , aby wygenerować nowy klucz publiczny teraz ustawić swoje pochodzenie do HTTPS alternatywa:
> https://accountname@bitbucket.org/accountname/reponame.git
Korzystanie z narzędzia GUI, takiego jak TortoiseGit lub narzędzi wiersza poleceń .
Oto dokumentacja tego alternatywnego adresu URL pochodzenia.
Wiersz poleceń, aby dodać początek, jeśli taki nie istnieje:
git remote add origin https://accountname@bitbucket.org/accountname/reponame.git
Linia poleceń do zmiany istniejącego początku:
git remote set-url origin https://accountname@bitbucket.org/accountname/reponame.git
UWAGA: nazwa Twojego konta nie jest Twoim adresem e-mail.
Możesz także ustawić informacje globalne:
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
Następnie spróbuj ponownie nacisnąć (nie ma potrzeby ponownego zatwierdzania)
git push origin master