Wiem, jak przekazać nazwę użytkownika i hasło do żądania HTTPS w ten sposób:
git clone https://username:password@remote
Ale I'd chciałbym wiedzieć, jak zapewnić nazwę użytkownika i hasło do zdalnego jak to:
git clone [email protected]
I've tried like this:
git clone username:password@[email protected]
git clone git@username:[email protected]
git clone [email protected]@username:password
Ale to nie zadziałało.
Użyj:
git clone https://username:[email protected]/username/repository.git
Ten sposób zadziałał dla mnie z repozytorium GitHub.
W oparciu o komentarz Michaela Scharfa'a:
Możesz pominąć hasło, aby nie było ono'logowane w twoim pliku historii Bash:
git clone https://[email protected]/username/repository.git
Zostaniesz poproszony o podanie hasła.
Format user@host:path/to/repo
mówi Gitowi aby użył ssh do zalogowania się na host
z nazwą użytkownika user
. Z git help clone
:
Alternatywna składnia podobna do scp może być również używana z protokołem ssh:
[user@]host.xz:path/to/repo.git/
.
Część przed @
jest nazwą użytkownika, a metoda uwierzytelniania (hasło, klucz publiczny, itp.) jest określana przez ssh, nie Git. Git nie ma możliwości przekazania hasła do ssh, ponieważ ssh może nawet nie używać hasła w zależności od konfiguracji zdalnego serwera.
ssh-agent
aby uniknąć ciągłego wpisywania hasełJeśli nie chcesz wpisywać hasła ssh przez cały czas, typowym rozwiązaniem jest wygenerowanie pary klucz publiczny/prywatny, umieszczenie klucza publicznego w pliku ~/.ssh/authorized_keys
na zdalnym serwerze, i załadowanie klucza prywatnego do ssh-agent
. Zobacz także https://stackoverflow.com/q/1595848/712605, GitHub's help page on ssh key passphrases, gitolite'ssh documentation, and Heroku'ssh keys documentation.
Jeśli masz wiele kont w miejscach takich jak GitHub lub Heroku, będziesz miał wiele kluczy ssh (przynajmniej po jednym na konto). Aby wybrać, jako które konto chcesz się zalogować, musisz powiedzieć ssh, który klucz prywatny ma być użyty.
Na przykład, załóżmy, że masz dwa konta GitHub: foo
i bar
. Twój klucz ssh dla foo
to ~/.ssh/foo_github_id
a Twój klucz ssh dla bar
to ~/.ssh/bar_github_id
. Chcesz mieć dostęp do [email protected]:foo/foo.git
z konta foo
i [email protected]:bar/bar.git
z konta bar
. Dodałbyś poniższe do swojej ~/.ssh/config
:
Host gh-foo
Hostname github.com
User git
IdentityFile ~/.ssh/foo_github_id
Host gh-bar
Hostname github.com
User git
IdentityFile ~/.ssh/bar_github_id
Następnie sklonowałbyś te dwa repozytoria w następujący sposób:
git clone gh-foo:foo/foo.git # logs in with account foo
git clone gh-bar:bar/bar.git # logs in with account bar
Niektóre usługi zapewniają dostęp HTTP jako alternatywę dla ssh:
GitHub:
https://username:[email protected]/username/repository.git
Gitorious:
https://username:[email protected]/project/repository.git
Heroku: Zobacz ten artykuł pomocniczy.
OSTRZEŻENIE: Dodanie hasła do adresu URL klonu spowoduje, że Git będzie przechowywał twoje hasło w formacie jawnym w .git/config
. Aby bezpiecznie przechowywać hasło podczas korzystania z HTTP, użyj pomocnika poświadczeń. Na przykład:
git config --global credential.helper cache
git config --global credential.https://github.com.username foo
git clone https://github.com/foo/repository.git
Powyższe spowoduje, że Git będzie pytał o twoje hasło raz na 15 minut (domyślnie). Zobacz git help credentials
po szczegóły.
W komentarzach @Bassetassen's odpowiedź, @plosco wspomniał, że możesz użyć git clone https://<token>@github.com/username/repository.git
, aby sklonować z GitHub przynajmniej. Pomyślałem, że rozwinę, jak to zrobić, na wypadek, gdyby ktoś natknął się na tę odpowiedź, tak jak ja, próbując zautomatyzować niektóre klonowanie.
GitHub ma bardzo przydatny przewodnik, jak to zrobić, ale nie obejmuje on tego, co zrobić, jeśli chcesz zawrzeć to wszystko w jednej linii do celów automatyzacji. Ostrzega on, że dodanie tokena do adresu URL klonu spowoduje zapisanie go w formacie plaintext w .git/config
. Jest to oczywiście ryzyko bezpieczeństwa dla prawie każdego przypadku użycia, ale ponieważ planuję usunąć repo i cofnąć token, kiedy skończę, nie obchodzi mnie to.
GitHub ma cały przewodnik tutaj jak zdobyć token, ale tutaj'jest TL;DR.
Tak samo jak w komendzie @plosco, git clone https://<token>@github.com/<username>/<repository>.git
, tylko zamień <token>
, <username>
i <repository>
na cokolwiek, co jest Twoim info.
Jeśli chcesz sklonować go do konkretnego folderu, po prostu wstaw adres folderu na końcu, jak poniżej: git clone https://<token>@github.com/<username>/<repository.git> <folder>
, gdzie <folder>
jest, zgadłeś, folderem, do którego chcesz go sklonować! Możesz oczywiście używać .
, ..
, ~
, itp. tak jak gdzie indziej.
Nie wszystko z tego może być konieczne, w zależności od tego jak wrażliwe jest to co robisz.
rm -rf <folder>
.git remote remove origin
lub po prostu usunąć token wykonując git remote set-url origin https://github.com/<username>/<repository.git>
.Zauważ, że ja'nie jestem profesjonalistą, więc powyższe może nie być bezpieczne w tym sensie, że żaden ślad nie zostanie pozostawiony dla jakiegokolwiek rodzaju pracy kryminalistycznej.