Git terus menanyakan kata sandi kunci ssh saya

538

Saya membuat kunci seperti yang diperintahkan dalam tutorial github, mendaftarkannya dengan github, dan mencoba menggunakan ssh-agent secara eksplisit - namun git terus menanyakan kata sandi saya setiap kali saya mencoba melakukan tarikan atau dorongan.

Apa yang bisa menjadi penyebabnya?

Rogach
sumber

Jawaban:

1039

Setelah Anda memulai agen SSH dengan:

eval $(ssh-agent)
  1. Anda harus menambahkan kunci pribadi Anda ke sana:

    ssh-add
    

    Ini akan menanyakan kata sandi Anda sekali saja, dan kemudian Anda harus mendorong, asalkan Anda mengunggah kunci publik ke Github.

  2. Untuk menyimpan kunci secara permanen di macOS:

    ssh-add -K  
    

    Ini akan bertahan setelah Anda menutup dan membukanya kembali dengan menyimpannya di gantungan kunci pengguna.

Roberto Bonvallet
sumber
16
log-out dari server, ssh kembali, jalankan git pull, minta saya untuk kata sandi lagi.
cyber8200
35
ssh-add -Kakan bertahan setelah Anda menutup dan membukanya kembali dengan menyimpannya di gantungan kunci pengguna.
Kirk
72
@Kirk ssh-add -Kmemberikan yang berikut:unknown option -- K usage: ssh-add [options] [file ...] Options: -l List fingerprints of all identities. -L List public key parameters of all identities. -k Load only keys and not certificates. -c Require confirmation to sign using identities -t life Set lifetime (in seconds) when adding identities. -d Delete identity. -D Delete all identities. -x Lock agent. -X Unlock agent. -s pkcs11 Add keys from PKCS#11 provider.
Sandeep C
13
Saya tetap diminta untuk frasa sandi terlepas.
IgorGanapolsky
21
-Kspesifik apel. Lihat help.github.com/articles/…
bkdir
238

Ini telah terjadi pada saya setelah restart sejak memutakhirkan dari OS X El Capitan (10.11) ke macOS Sierra (10.12). The ssh-addsolusi bekerja sementara tetapi tidak akan bertahan di restart lain.

Solusi permanen adalah mengedit (atau membuat) ~/.ssh/configdan mengaktifkan UseKeychainopsi.

Host *
    UseKeychain yes

Terkait: macOS terus menanyakan frasa sandi ssh saya sejak saya memperbarui ke Sierra

Kyle Clegg
sumber
1
bekerja untuk saya, terima kasih ... saya telah melakukan ... ssh-add -K /Users/***/.ssh/git/id_rsatapi itu masih tidak berfungsi setelah terminal restart ... terima kasih.
nawlbergs
2
Ingin mengapa ini terjadi? Baca catatan teknis tentang perubahan OpenSSH developer.apple.com/library/content/technotes/tn2449/…
samwize
62

Jika Anda sudah mencoba ssh-adddan Anda masih diminta memasukkan kata sandi Anda, maka coba gunakan ssh-add -K. Ini menambahkan frasa sandi Anda ke gantungan kunci Anda.

Pembaruan: jika Anda menggunakan macOS Sierra maka Anda kemungkinan harus melakukan langkah lain karena hal di atas mungkin tidak lagi berfungsi. Tambahkan yang berikut ke Anda ~/.ssh/config:

Host *
  UseKeychain yes
Darryl Young
sumber
2
Masih meminta saya untuk frasa sandi.
IgorGanapolsky
@IgorGanapolsky Apakah Anda menggunakan macOS Sierra? Jika demikian, lihat apa yang baru saja saya tambahkan ke jawabannya. Saya harap itu membantu.
Darryl Young
2
Ya, saya di Sierra. Namun, inilah garis yang bekerja untuk saya juga: AddKeysToAgent ya
IgorGanapolsky
1
Ini juga berfungsi dengan BitBucket Cloud. Saya mengalami masalah di GitKraken dan ini menyelesaikan masalah saya.
Maleakhi
54

Saya akan mencoba yang berikut:

  1. Mulai GitBash
  2. Edit ~/.bashrcfile Anda
  3. Tambahkan baris berikut ke file

SSH_ENV=$HOME/.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
  1. Simpan dan tutup file
  2. Tutup GitBash
  3. Buka kembali GitBash
  4. Masukkan frasa sandi Anda
Roland
sumber
4
Untuk referensi di masa mendatang, ini juga berfungsi dengan zsh. Tambahkan saja ini ke.zshrc
Arda
2
Saya percaya ini menganggap keyfile Anda dipanggil id_rsa. Jika Anda memiliki nama khusus, Anda harus menggunakan mis. /usr/bin/ssh-add ~/.ssh/custom_filename
Juha Untinen
2
Bisakah Anda jelaskan apa yang terjadi pada skrip ini?
LeeR
2
@Lee itu memulai ssh-agent jika belum berjalan, yang memastikan untuk tidak menanyakan kata sandi ssh pada setiap dorongan (kurang lebih).
Roland
Ini hanya menjalankan ssh-agent dan menambahkan kunci pada setiap login. Anda masih harus memasukkan kata sandi setiap kali Anda masuk. Jadi misalnya jika Anda memiliki skrip ssh-ing dan melakukan perintah GIT, sayangnya ini tidak berguna sama sekali.
trainoasis
27

Coba tambahkan ini ke ~ / .ssh / config Anda :

Host *
   AddKeysToAgent yes
   UseKeychain yes
   IdentityFile ~/.ssh/id_rsa

... dengan asumsi kunci pribadi Anda dinamai id_rsa

IgorGanapolsky
sumber
11
UseKeychain ya hanya berlaku untuk mac
Oz123
3
@ Oz123 apa yang setara dengan windows
IgorGanapolsky
@ Oz123 Saya pikir setara pada Windows adalah AddKeysToAgent ya periksa jawaban ini stackoverflow.com/questions/52423626/…
fedeteka
6

Saya memiliki masalah serupa, tetapi jawaban lainnya tidak memperbaiki masalah saya. Saya pikir saya akan pergi ke depan dan memposting ini kalau-kalau ada orang lain yang memiliki pengaturan seperti saya.

Ternyata saya punya beberapa kunci dan Git menggunakan yang salah dulu. Itu akan meminta saya untuk frasa sandi saya, dan saya akan memasukkannya, lalu Git akan menggunakan kunci lain yang akan berfungsi (bahwa saya tidak perlu memasukkan kata sandi itu).

Saya baru saja menghapus kunci yang digunakannya untuk meminta saya memasukkan frasa sandi dan sekarang berfungsi!

11101101b
sumber
5

Sepertinya Anda mungkin mengalami masalah dengan SSH-Agent itu sendiri. Saya akan mencoba memecahkan masalah itu.

1) Apakah Anda melakukan ssh-add untuk menambahkan kunci Anda ke SSH?

2) Apakah Anda menutup jendela terminal di antara kegunaan, karena jika Anda menutup jendela Anda harus memasukkan kata sandi lagi ketika Anda membukanya kembali.

Jeff Welling
sumber
2
Alangkah baiknya menambahkan informasi tentang cara mengatasi masalah pertama Jeff Welling.
ranu
5

Jika solusi di atas tidak bekerja untuk saya, satu hal yang perlu diperiksa adalah Anda benar-benar memiliki kunci publik juga (biasanya id_rsa.pub). Tidak biasa untuk tidak melakukannya, tapi itu adalah penyebab bagiku.

Untuk membuat kunci publik dari kunci pribadi Anda:

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
Stephen Harris
sumber
1

Saya mencoba berbagai solusi tetapi tidak ada yang membantu. Tapi langkah-langkah ini ( lingkungan GitBash SSH saya selalu meminta frasa sandi saya, apa yang bisa saya lakukan? ) Dari lapisan Bitbucket.com berfungsi dengan baik:

Idenya adalah:

  1. Anda membuat ~/.bashrcfile

  2. tambahkan ikuti skrip:

    SSH_ENV=$HOME/.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
    
  3. jalankan kembali Bash

alx lark
sumber
1

Solusi lain yang mungkin tidak disebutkan di atas adalah memeriksa remote Anda dengan perintah berikut:

git remote -v

Jika remote tidak memulai dengan git tetapi mulai dengan https Anda mungkin ingin mengubahnya menjadi git dengan mengikuti contoh di bawah ini.

git remote -v // origin is https://github.com/user/myrepo.git
git remote set-url origin [email protected]:user/myrepo.git
git remote -v // check if remote is changed
Darkov
sumber