“Git clone git@remote.git” komutunu çalıştırırken nasıl bir kullanıcı adı ve şifre verebilirim?


845

Nasıl böyle bir HTTPS isteğine bir kullanıcı adı ve şifre sağlamak biliyorum:

git clone https://username:password@remote

Ancak uzaktan kumandaya şu şekilde bir kullanıcı adı ve şifre nasıl sağlanacağını bilmek istiyorum:

git clone git@remote.git

Ben böyle denedim:

git clone username:password@git@remote.git
git clone git@username:password@remote.git
git clone git@remote.git@username:password

Ama işe yaramadılar.


4
Yapamazsın. "@" Den önceki "git" zaten bir kullanıcı adıdır. Havuz URL'sini nereden aldınız (git@remote.get)? Farklı bir kullanıcı adı ve şifre girmeniz gerektiği fikrini nereden buldunuz?
Ken Thomases

3
Depo URL'm heroku "git@heroku.com: zxy-helloworld.git" adresinden. Ve klonlamak ve itmek için emacs kabuğu kullanıyorum. Kabuk şifre isterse, emac'lar askıda kalacaktır. Windows'taki emac'larla
koordinat

Kullanıcı adı bir e-posta ise ne olur? nasıl yazıyorsun myemail @ gmail.com @ example.com ?
Kyon Perez

Yanıtlar:


1319

Michael Scharf'ın yorumuna dayanarak:

Bash geçmişi dosyanıza giriş yapmamak için şifreyi dışarıda bırakabilirsiniz:

git clone https://username@github.com/username/repository.git

Sizden şifrenizi girmeniz istenir.

Alternatif olarak şunları kullanabilirsiniz:

git clone https://username:password@github.com/username/repository.git

Bu şekilde bir GitHub deposundan benim için çalıştı.


5
bu arada aynı olmak zorunda değil. İş arkadaşınız git repo'yu oluşturduysa ve başka bir hesap olarak giriş yapıyorsanız, bunlar aynı olmayacaktır.
holgac

49
Bu dosyanın URL'sine .git / config dosyasına kaydedilmesi tavsiye edilmez. Güvenli değil, ssh tuşunu kullanmak daha iyidir
zetanova

55
@MrDuk sorun değil, kaç (% 40 iirc olarak).
Benjamin Gruenbaum

57
Sen şifresini bırakabilirsiniz: git clone https://username@github.com/username/repository.git. git size soracak ve .git / config'e veya bash geçmişinize kaydedilmeyecektir
Michael_Scharf

36
satırın başına 'boşluk' da yazabilirsiniz, böylece linux komutu tarihte
saklamaz

213

user@host:path/to/repoBiçimi giriş yapmak kullanımı ssh Git söyler hostkullanıcı adıyla user. Gönderen git help clone:

Alternatif bir scp benzeri sözdizimi de ssh protokolü ile kullanılabilir:

[user@]host.xz:path/to/repo.git/

'Nin önündeki bölüm @kullanıcı adıdır ve kimlik doğrulama yöntemi (şifre, genel anahtar vb.) Git değil ssh tarafından belirlenir. Git'in ssh'ye bir parola geçirmesi mümkün değildir, çünkü ssh uzak sunucunun yapılandırmasına bağlı olarak bir parola bile kullanamayabilir.

ssh-agentŞifreleri her zaman yazmaktan kaçınmak için kullanın

Ssh parolanızı her zaman yazmak istemiyorsanız, tipik çözüm bir genel / özel anahtar çifti oluşturmak , ortak anahtarı uzak sunucudaki ~/.ssh/authorized_keysdosyanıza koymak ve özel anahtarınızı içine yüklemektir ssh-agent. Ayrıca , Bir kez giriş yapmak için Git'i SSH üzerinden yapılandırma , GitHub'ın ssh anahtar parolaları , gitolit'in ssh belgeleri ve Heroku'nun ssh tuşları belgeleri hakkındaki yardım sayfasına bakın .

GitHub'da (veya Heroku veya ...) birden fazla hesap arasında seçim yapma

GitHub veya Heroku gibi bir yerde birden fazla hesabınız varsa, birden fazla ssh anahtarınız olur (hesap başına en az bir tane). Hangi hesap olarak oturum açmak istediğinizi seçmek için, ssh'a hangi özel anahtarı kullanacağınızı söylemelisiniz .

Örneğin, iki GitHub hesabınız olduğunu varsayalım: foove bar. Sizin ssh anahtarı fooIS ~/.ssh/foo_github_idve için ssh anahtarı barolduğunu ~/.ssh/bar_github_id. Sen erişmek istediğiniz git@github.com:foo/foo.gitsenin ile foohesap ve git@github.com:bar/bar.gitsizin ile barhesaba. Şunlara aşağıdakileri eklersiniz ~/.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

Daha sonra iki veri havuzunu aşağıdaki gibi klonlayabilirsiniz:

git clone gh-foo:foo/foo.git  # logs in with account foo
git clone gh-bar:bar/bar.git  # logs in with account bar

SSH'den tamamen kaçınma

Bazı hizmetler ssh'ye alternatif olarak HTTP erişimi sağlar:

  • GitHub:

    https://username:password@github.com/username/repository.git
    
  • gitorious:

    https://username:password@gitorious.org/project/repository.git
    
  • Heroku: Bu destek makalesine bakın .

UYARI : Klon URL'nize şifrenizi eklemek Git'in düz metin şifrenizi saklamasına neden olur .git/config. HTTP kullanırken şifrenizi güvenli bir şekilde saklamak için bir kimlik bilgisi yardımcısı kullanın. Örneğin:

git config --global credential.helper cache
git config --global credential.https://github.com.username foo
git clone https://github.com/foo/repository.git

Yukarıdakiler Git'in her 15 dakikada bir (varsayılan olarak) şifrenizi istemesine neden olur. Ayrıntılar git help credentialsiçin bakınız.


Git'in SSH ile nasıl çalıştığının en iyi açıklaması budur. Benim anlayış git@githost.com: path / to / repo.git belirttiğinizde, etkili bir şekilde git'e kullanıcının git'in kendisi olduğunu ve ssh-agent'tan kimlik bilgilerinizi (ortak anahtar) alması gerektiğini söyler. "Githost.com" ana bilgisayarı.
Anael

39

@ Bassetassen'in cevabının yorumlarında @plosco, en git clone https://<token>@github.com/username/repository.gitazından GitHub'dan klonlamak için kullanabileceğinizi belirtti. Birisi bu klonlamayı otomatikleştirmeye çalıştığım gibi karşılaşırsa, bunu nasıl yapacağımı genişleteceğimi düşündüm.

GitHub'ın bunu nasıl yapacağınız konusunda çok kullanışlı bir kılavuzu var, ancak otomasyon amacıyla hepsini tek bir satıra dahil etmek istiyorsanız ne yapmanız gerektiğini kapsamıyor. Klon URL'sine jeton eklenmesinin, etiketi düz metin olarak saklayacağı konusunda uyarır .git/config. Bu hemen hemen her kullanım durumu için bir güvenlik riskidir, ancak repoyu silmeyi ve bittiğimde jetonu iptal etmeyi planladığım için umrumda değil.

1. Jeton Oluşturun

GitHub'ın nasıl bir token alacağına dair tam bir rehberi var , ama TL; DR.

  1. Gidin Ayarlar> Geliştirici Ayarlar> Kişisel Erişim Jetonlar ( burada doğrudan bir bağlantı var )
  2. "Yeni Bir Jeton Oluştur" u tıklayın ve şifrenizi tekrar girin. ( başka bir doğrudan bağlantı var )
  3. Bunun için bir açıklama / ad belirleyin, "repo" iznini kontrol edin ve sayfanın altındaki "Jeton oluştur" düğmesini tıklayın.
  4. Sayfadan ayrılmadan önce yeni simgenizi kopyalayın

2. Repo'yu Kopyalayın

Komut @plosco verdi Aynı şekilde, git clone https://<token>@github.com/<username>/<repository>.gitsadece yerine <token>, <username>ve <repository>ne olursa olsun ile bilgi olduğunu.

Belirli bir klasöre klonlamak istiyorsanız, klasör adresini sonuna şu şekilde ekleyin:, git clone https://<token>@github.com/<username>/<repository.git> <folder>nerede <folder>, tahmin ettiniz, klonlanacak klasörü! Sen elbette kullanabilirsiniz ., .., ~başka bir yerde olabilir gibi burada vb.

3. İz Bırakma

Yaptıklarınızın ne kadar hassas olduğuna bağlı olarak bunların hepsi gerekli olmayabilir.

  • Bir süre kullanma niyetiniz yoksa, muhtemelen jetonu takılmak istemezsiniz, bu nedenle jetonlar sayfasına geri dönün ve yanındaki sil düğmesine basın.
  • Repoya tekrar ihtiyacınız yoksa silin rm -rf <folder>.
  • Repoya tekrar ihtiyaç duyuyorsanız, ancak tekrar otomatikleştirmeniz gerekmiyorsa, uzaktan kumandayı git remote remove originkaldırabilir veya çalıştırarak jetonu kaldırabilirsiniz git remote set-url origin https://github.com/<username>/<repository.git>.
  • Simgenin orada kayıtlı kalmadığından emin olmak için bash geçmişinizi temizleyin. Bunu yapmanın, bu soruyu ve bu soruyu görmenin birçok yolu vardır . Bununla birlikte, yukarıdaki komutların hepsinin başında depolanmasını önlemek için boşluk bırakması daha kolay olabilir.

Ben profesyonel değilim, bu yüzden yukarıdaki adli tıp çalışmaları için hiçbir iz kalmayacağı anlamında güvenli olmayabilir.


1
https://<token>@github.comportalıma kabul edilmedi, kullanmak zorunda kaldımhttps://oauth2:<token>@github.com
MushyPeas

25

Birçok cevap olmasına rağmen, kullanıcı adı veya şifre içinde özel karakterler olduğunda kendim tekrarlanan sorunla karşı karşıya.

URL, git için kullanıcı adınızı ve şifrenizi kodlar, ardından URL'nin bir parçası olarak kullanır (güvenlik sorunu olmadığında).

Örneğin, kullanıcı adının URL kodlamalı değeri

'kullanıcı + 1'% 2B1 kullanıcısı

ve şifrenin URL kodlu değeri

'Hoş Geldiniz @ 1234' Hoş Geldiniz% 401234

O zaman GIT Clone URL'niz şöyle görünür,

git clone https://user%2B1:Welcome%401234@actual-git-url-for-the-repo mükemmel çalışır, oysa

git clone https: // kullanıcı + 1: Welcome @ 1234 @ actual-git-url-for-repo size 403 hataları veriyor

Bu yardımcı olur umarım.

Her halükarda, URL kodunu çevrimiçi kodlamak istiyorum: https://www.urlencoder.org/


13

Bu sorunu şu şekilde çözdüm:

resim açıklamasını buraya girin


11
parolanızı komut satırına yazmak iyi bir fikir değildir. Sisteminizin komut satırı geçmişini bir dosyada depolayabileceğini biliyor muydunuz? (Örn: Linux'ta .bash_history adında gizli bir dosya var)
Ağustos

Doğru. Ne zaman bunu yapsam, ya da böyle bir şey, ki bu bazen çok uygun olabilir, her zaman kullandığım komutu geçmişten silerim (geçmiş -d).
Francesco Marchetti-Stasi

4
@ FrancescoMarchetti-Stasi komutu silmenize gerek yok, sadece komutun başında bir boşluk kullanın ve asla geçmişte saklanmayacaktır.
Ishtiyaq Husain

Evet - Unix sistemlerinde yaklaşık 30 yıl sonra, sadece birkaç ay önce öğrendim ... utanç beni :)
Francesco Marchetti-Stasi

9

Windows'ta , aşağıdaki adımlar ingilizce iken GitHub oturum açma penceresini yeniden tetiklemelidir git clone:

  • "Kimlik Bilgisi Yöneticisi" için arama başlat menüsü
  • "Windows Kimlik Bilgileri" ni seçin
  • Git veya GitHub ile ilgili tüm bilgileri silin

sonuç



5
git config --global core.askpass

Aynı şekilde klonlamadan önce bunu çalıştırın, düzeltilmelidir!


3
Bunu denedim, hala istemiyor.
Maarten Kieft

Global yapılandırmayı ayarlamak hiçbir zaman iyi bir fikir değildir çünkü diğer klonları bozabilir.
Martin

1

Bu mükemmel bir Stack Overflow sorusu ve son zamanlarda karşılaştığım sinir bozucu bir sorunu çözebilmem için cevaplar çok öğretici oldu.

Atlassian's BitBucketÇalıştığım kuruluş, depoları tamamen yerinde güvence altına alabilmek için esas olarak GitHub sürümünü (Github değil) kullanıyor . @Coordinate ile benzer bir sorunla karşılaşıyordum, kontrol ettiğim yeni bir depo için şifremin gerekli olmasıydı. Kimlik bilgilerim tüm BitBucketprojeler için küresel olarak kaydedildi , bu nedenle kimlik bilgilerinizin kaybına neyin neden olduğundan emin değilim.

Kısacası, aşağıdaki GIT komutunu girebildim ( yalnızca kullanıcı adımı sağlayarak ), daha sonra Git'in Kimlik Bilgisi Yöneticisi'nden daha sonra kaydedebileceğim şifreyi istememi istedi.

git clone https://user@code.domain.org/git/[organization]/[team]/[repository.git]

NOT: köşeli parantezli dizin alt yolları yalnızca dahili başvurulara başvurur ve sizin için değişiklik gösterir!


0

Eğer kullanıyorsanız http/httpsve size aradığınız TAMAMEN AUTOMATE (örneğin: bir CI / CD boru hattının içinde) herhangi bir kullanıcı girişi veya hiç istemi herhangi bir kullanıcıyı gerektirmeden süreci, aşağıdaki yaklaşımı destekleyecek kullanabilirgit credential.helper

GIT_CREDS_PATH="/my/random/path/to/a/git/creds/file"
# Or you may choose to not specify GIT_CREDS_PATH at all.
# See https://git-scm.com/docs/git-credential-store#FILES for the defaults used

git config --global credential.helper "store --file ${GIT_CREDS_PATH}"
echo "https://alice:${ALICE_GITHUB_PASSWORD}@github.com" > ${GIT_CREDS_PATH}

burada ALICE_GITHUB_PASSWORDortam değişkenini önceki bir kabuk komutundan veya boru hattı yapılandırmanızdan vb. ayarlamayı seçebilirsiniz .

"Depola" tabanlı git-credential-helper'ın parolaları ve değerleri düz metin olarak sakladığını unutmayın. Bu nedenle, belirteç / şifrenizin çok sınırlı izinlere sahip olduğundan emin olun.


Şimdi sadece kullanım https: //alice@github.com/my_repo.git sizin otomatik sistem ihtiyacı yerde repo getirmesi - bu kimlik bilgilerini kullanacak aliceiçinde github.comgit-kimlik-yardımcısı tarafından deposu olarak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.