Git di Bitbucket: Selalu dimintai kata sandi, bahkan setelah mengunggah kunci SSH publik saya

180

Saya mengunggah ~/.ssh/id_rsa.pubke kunci SSH Bitbucket seperti yang dijelaskan , tetapi Git masih meminta saya untuk kata sandi saya di setiap operasi (seperti git pull). Apakah saya melewatkan sesuatu?

Ini adalah repositori pribadi (simpanan repositori pribadi orang lain) dan saya mengkloningnya seperti ini:

git clone [email protected]:Nicolas_Raoul/therepo.git

Ini adalah lokal saya .git/config:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = https://[email protected]/Nicolas_Raoul/therepo.git
[branch "master"]
        remote = origin
        merge = refs/heads/master

Dalam lingkungan yang sama dengan kunci publik yang sama, Git on Github berfungsi dengan baik.
.sshis rwx------, .ssh/id_rsais -rw-------, .ssh/id_rsa.pubis-rw-r--r--

Nicolas Raoul
sumber

Jawaban:

265

Apakah Anda yakin Anda mengkloningnya menggunakan url ssh?

Url untuk asal mengatakan url = https://[email protected]/Nicolas_Raoul/therepo.git jadi jika menggunakan https ia akan meminta kata sandi terlepas dari kunci ssh Anda.

Jadi yang ingin Anda lakukan adalah sebagai berikut:

buka file config Anda di repo Anda saat ini ..

vim .git/config

dan ganti baris dengan url dari

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = https://[email protected]/Nicolas_Raoul/therepo.git

untuk

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = [email protected]:Nicolas_Raoul/therepo.git
manojlds
sumber
62
Anda benar, terima kasih! Saya kemungkinan besar mengkloning dengan URL yang salah. Saya mengganti URL .git/configdengan [email protected]:Nicolas_Raoul/therepo.gitdan sekarang berfungsi!
Nicolas Raoul
8
dan untuk mengubah remote menggunakan git stackoverflow.com/questions/2432764/…
Alex Nolasco
3
Itu bitbucket yang menyarankan saya https url ketika membuat repositori! Bagaimana bisa!
Denis Kniazhev
4
Perlu diingat jika bitbucket Anda bersifat pribadi, jika Anda ingin menggunakan protokol git, Anda perlu menambahkan kunci ssh Anda ke situs web BitBuket di pengaturan Anda.
cevaris
7
Harus mengubah URL ke ssh://[email protected]/userName/repoName.git- tanpa ssh://awalan itu tidak berfungsi.
trygub
34

Seperti yang dijelaskan di sini , jika Anda mengkloning dengan SSH url, Anda tidak perlu memasukkan nama pengguna / kata sandi setiap kali Anda menekan / menarik. Periksa jawaban di atas dengan @ manojlds

Tetapi jika Anda ingin mengkloning dengan HTTPS dan ingin menghindari memasukkan nama pengguna / kata sandi setiap kali, Anda dapat menyimpan kredensial ke dalam cache dengan perintah di bawah ini:

git config --global credential.helper 'cache --timeout 3600'

di mana 3600 (detik) berarti 1 jam, Anda dapat mengubahnya sesuai kebutuhan Anda.

Ajeet Shah
sumber
@atilkan Dalam hal ini, dapatkah Anda memberikan mesin / OS Anda dan info versi git? Dan pesan kesalahan jika ada ketika Anda mencoba mengatur pengaturan cache.
Ajeet Shah
Saya kloning bitbucket bentuk repositori seseorang, dan ini adalah remote saya. manecs-MBP:LocationTracker manec$ git remote -v origin https://[email protected]/Vysh1/locationtracker.git (fetch) origin https://[email protected]/Vysh1/locationtracker.git (push)
Banee Ishaque K
@AjeetShah bagaimana jika saya memasukkan kata sandi yang salah? apakah itu juga akan men-cache kata sandi yang salah?
anaval
@anaval Mengapa Anda tidak mencobanya dan setelah itu mencoba memasukkan kata sandi yang benar setelah membersihkan atau menonaktifkan cache? Edit jawabannya dan beri tahu kami bagaimana Anda melakukannya :)
Ajeet Shah
19

Sudah dijawab di atas. Saya akan merangkum langkah-langkah untuk memeriksa di atas.

dijalankan git remote -vdalam dir proyek. Jika output menunjukkan url jarak jauh dimulai denganhttps://abc maka Anda mungkin memerlukan kata sandi nama pengguna setiap kali.

Jadi untuk mengubah jalankan url jarak jauh git remote set-url origin {ssh remote url address starts with mostly [email protected]:} .

Sekarang jalankan git remote -v untuk memverifikasi url jarak jauh yang diubah.

Rujuk: https://help.github.com/articles/changing-a-remote-s-url/

shiva kumar
sumber
16

Halo Googler dari masa depan.

Pada MacOS> = High Sierra, kunci SSH tidak lagi disimpan ke KeyChain karena alasan .

Menggunakan ssh-add -Ktidak lagi selamat restart juga.

Berikut adalah 3 solusi yang mungkin .

Saya telah menggunakan metode pertama dengan sukses. Saya telah membuat sebuah file bernama configdi ~/.ssh:

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa
Vaiden
sumber
2
Ini perlu lebih banyak perhatian! Saya menghabiskan waktu lama mencari solusi dan yang pertama dengan configfile dalam /.sshkarya sempurna!
Kitson
1
Jawaban ini memecahkan masalah saya di MacO: cd ~/.ssh+ ls+ nano config(file sudah dibuat) + tambahkan kode dalam jawaban Vaiden. Kemudian kontrol X + Y untuk menyimpan file.
Sébastien Gicquel
9

Dalam kasus permintaan HTTP, dan juga mungkin untuk menyisipkan kredensial (dengan kata sandi) langsung ke url:

http://username:[email protected]/...

Ini akan menyelamatkan rasa sakit untuk memberikan kredensial Anda setiap kali lagi. Sederhana modifikasi .git / config (url) Anda.

Sven W.
sumber
10
Tapi tidak aman. Dan tidak berfungsi jika kata sandi memiliki beberapa huruf seperti$%
Gank
3
Siapa pun yang membaca komentar ini, harap diingat: hanya karena berfungsi , tidak berarti itu benar . Jika Anda menyalin kata sandi di mana saja secara permanen, berarti Anda salah melakukannya. Sama dengan mereka yang selalu mengatur izin folder untuk 777: berhenti, pikirkan, teliti, pahami, lalu lakukan dengan benar.
dKen
9

Tidak ada jawaban yang membantu saya, ternyata masalah saya sedikit berbeda. Itu ssh yang meminta kata sandi saya setiap kali, sebelum mengirim kunci. Jadi yang harus saya lakukan adalah menautkan kata sandi saya dengan perintah ini:

ssh-add -K ~/.ssh/id_rsa

Ini kemudian akan meminta Anda untuk kata sandi Anda dan menyimpannya. Ini bisa menjadi solusi yang Anda cari jika setiap kali Anda diminta kata sandi

Masukkan frasa sandi untuk kunci '/ Pengguna //.ssh/id_rsa':

Info lebih lanjut di sini

CATATAN: Saya berhasil menggunakan ini pada mesin mac saya, tetapi seperti yang ditunjukkan oleh @Rob Kwasowski di bawah, opsi huruf besar Kunik untuk mac. Jika tidak pada mac Anda harus menggunakan huruf kecil k(yang mungkin juga berfungsi untuk mac tapi saya belum menguji).

stackPusher
sumber
1
Itu hebat, tetapi harus berupa huruf kecil k:ssh-add -k ~/.ssh/id_rsa
Rob Kwasowski
bisakah Anda menjelaskannya?
stackPusher
Seperti yang dijelaskan di sini: ssh.com/ssh/add , opsi baris perintah adalah huruf kecil k, bukan huruf besar karena opsi tersebut peka terhadap huruf besar-kecil.
Rob Kwasowski
kanan tetapi opsi K huruf besar akan menambahkan kunci ke gantungan kunci juga, sementara huruf kecil k hanya akan menambahkan kunci ke agen. jadi yang saya tanyakan adalah 'mengapa Anda tidak ingin kunci juga ditambahkan ke gantungan kunci Anda?'
stackPusher
1
Harap perhatikan perbedaan platform, -Kkhusus untuk Mac: help.github.com/en/articles/error-ssh-add-illegal-option----k
Rob Kwasowski
5
webdev5
sumber
Saya pikir itu Step 1untuk Windowsdan Step 2untuk Linuxtetapi Anda lupa menyebutkannya dengan benar.
Ajeet Shah
Saya menjalankan 3 langkah itu di kotak Windows saya dan berhasil.
webdev5
2
Dalam hal ini, saya ingin menambahkan itu di Linux OS, kita hanya perlu step2 dan step3 untuk efek yang sama :)
Ajeet Shah
4

Berikut ini mengasumsikan akses baris perintah melalui iTerm / Terminal ke bitbucket.

Untuk MacOS Sierra 10.12.5, sistem saya memanifestasikan masalah yang setara - meminta frasa sandi SSH saya pada setiap koneksi ke bitbucket.

Masalahnya berkaitan dengan pembaruan OpenSSH di macOS 10.12.2, yang dijelaskan di sini dalam Catatan Teknis TN2449 .

Anda mungkin ingin menyesuaikan solusi Anda, tetapi yang berikut ini akan berfungsi ketika ditambahkan ke file ~ / .ssh / config Anda:

Host *
    UseKeychain yes

Untuk informasi lebih lanjut tentang konfigurasi ssh, lihat halaman manual untuk ssh_config:

% man ssh_config

Satu hal lagi: ada artikel bagus tentang superuser di sini yang membahas masalah ini dan berbagai solusi tergantung pada kebutuhan dan pengaturan Anda.

pob
sumber
2

Saya mengkloning repositori dengan HTTPS URL dan bukan URL SSH karenanya bahkan setelah menambahkan Kunci SSH itu meminta saya untuk kata sandi di Bash Shell.

Saya baru saja mengedit ./.git/configfile dan mengubah nilai urlvariabel hanya dengan mengganti https://kessh://

Misalnya

[core]
        ...
        ...
        ...
[remote "origin"]
        url = https://<username>@bitbucket.org/<username>/<repository_name>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
        ...
        ...
        ...

Diubah menjadi:

[core]
        ...
        ...
        ...
[remote "origin"]
        url = ssh://<username>@bitbucket.org/<username>/<repository_name>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
        ...
        ...
        ...
Swaroop Bhagwat
sumber
1

Anda mungkin perlu memeriksa ulang file identitas SSH Anda. Anda mungkin membimbing BitBucket untuk melihat kunci privat yang berbeda / salah dengan kunci publik yang setara yang telah Anda simpan di BitBucket.

Periksa dengan tail ~/.ssh/config- Anda akan melihat sesuatu yang mirip dengan:

Host bitbucket.org
 HostName bitbucket.org
 IdentityFile ~/.ssh/personal-bitbucket-ssh-key

Ingat, bahwa menambahkan identitas tambahan (seperti kantor dan rumah) dapat dilakukan dengan ssh-addperintah, misalnya:

ssh-keygen -t rsa -C "companyName" -f "companyName"
ssh-add ~/.ssh/companyName

Setelah Anda mengkonfirmasi kunci privat mana yang sedang dilihat secara lokal, Anda kemudian dapat mengambil setara publik Anda, dalam hal ini:

cat ~/.ssh/personal-bitbucket-ssh-key.pub | pbcopy

Dan rekatkan sandi itu ke BitBucket. Git push Anda sekarang akan (asalkan Anda menggunakan klon SSH seperti yang ditunjukkan oleh jawaban yang disebutkan di atas) diizinkan tanpa kata sandi, karena perangkat Anda adalah perangkat yang dikenal ramah.

Semoga ini membantu menjernihkannya untuk seseorang.

Hibah
sumber
0

Dengan saya, walaupun saya menjalankan 'git clone ssh: //[email protected]: 7999 / projName / projA.git' Saya masih dimintai kata sandi untuk repo baru yang saya kloning, jadi dengan membandingkan .git / config file ke repo lain yang berfungsi, ternyata url di bagian [remote "origin"], disetel ke jalur ssh di atas untuk repo baru, tetapi disetel ke https: xxx untuk yang berfungsi .

Nino
sumber
0

Saya memiliki keanehan lain di sekitar masuk. Saya menemukan sesuatu yang tampak benar-benar bodoh tetapi berhasil dalam kasus saya. Cukup buka gantungan kunci MacOS. Temukan ikon kunci login di sidebar. Klik untuk keluar dan kemudian klik untuk masuk. Kedengarannya bodoh tapi itu memecahkan masalah saya. Layak dicoba.

smileBot
sumber