Git cứ hỏi tôi mật khẩu khóa ssh của tôi


538

Tôi đã tạo các khóa theo hướng dẫn trong hướng dẫn github, đăng ký chúng với github và thử sử dụng ssh-agent một cách rõ ràng - nhưng git vẫn tiếp tục hỏi tôi mật khẩu của tôi mỗi khi tôi cố gắng kéo hoặc đẩy.

Nguyên nhân có thể là gì?


Câu trả lời:


1039

Khi bạn đã bắt đầu tác nhân SSH với:

eval $(ssh-agent)
  1. Bạn phải thêm khóa riêng của mình vào đó:

    ssh-add
    

    Điều này sẽ hỏi bạn cụm mật khẩu của bạn chỉ một lần, và sau đó bạn sẽ được phép đẩy, miễn là bạn đã tải khóa công khai lên Github.

  2. Để lưu khóa vĩnh viễn trên macOS:

    ssh-add -K  
    

    Điều này sẽ duy trì nó sau khi bạn đóng và mở lại bằng cách lưu trữ nó trong móc khóa của người dùng.


16
đăng xuất khỏi máy chủ, ssh trở lại, chạy git pull, nhắc tôi nhập lại mật khẩu.
cyber8200

35
ssh-add -Ksẽ duy trì nó sau khi bạn đóng và mở lại bằng cách lưu trữ nó trong móc khóa của người dùng.
Kirk

72
@Kirk ssh-add -Kđưa ra những điều sau: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
Tôi vẫn được nhắc cho một cụm mật khẩu bất kể.
IgorGanapolsky

21
-Klà táo cụ thể. Xem help.github.com/articles/ từ
bkdir 17/07/18

238

Điều này đã xảy ra với tôi sau khi khởi động lại kể từ khi nâng cấp từ OS X El Capitan (10.11) lên macOS Sierra (10.12). Các ssh-addgiải pháp làm việc tạm thời nhưng sẽ không tồn tại trên khởi động lại khác.

Giải pháp lâu dài là chỉnh sửa (hoặc tạo) ~/.ssh/configvà kích hoạt UseKeychaintùy chọn.

Host *
    UseKeychain yes

Liên quan: macOS liên tục hỏi cụm mật khẩu ssh của tôi kể từ khi tôi cập nhật lên Sierra


1
làm việc cho tôi cảm ơn ... tôi đã làm ... ssh-add -K /Users/***/.ssh/git/id_rsanhưng nó vẫn không hoạt động sau khi khởi động lại thiết bị đầu cuối ... cảm ơn bạn.
nawlbergs

2
Bạn muốn tại sao điều này xảy ra? Đọc ghi chú kỹ thuật về OpenSSH thay đổi developer.apple.com/l
Library / content / technotes / tn2449 / 21

62

Nếu bạn đã thử ssh-addvà bạn vẫn được nhắc nhập cụm mật khẩu của mình thì hãy thử sử dụng ssh-add -K. Điều này thêm mật khẩu của bạn vào móc khóa của bạn.

Cập nhật: nếu bạn đang sử dụng macOS Sierra thì có thể bạn cần phải thực hiện một bước nữa vì những điều trên có thể không còn hoạt động. Thêm phần sau vào ~/.ssh/config:

Host *
  UseKeychain yes

2
Vẫn nhắc tôi cho một cụm mật khẩu.
IgorGanapolsky

@IgorGanapolsky Bạn đang sử dụng macOS Sierra? Nếu vậy, hãy kiểm tra những gì tôi vừa thêm vào câu trả lời. Tôi hy vọng điều đó sẽ giúp.
Darryl Young

2
Vâng, tôi đang ở Sierra. Tuy nhiên, đây cũng là dòng hoạt động với tôi: AddKeysToAgent yes
IgorGanapolsky 13/03/2017

1
Điều này cũng hoạt động với BitBucket Cloud. Tôi đã gặp sự cố trong GitKraken và điều này đã giải quyết vấn đề của tôi.
Malachi

54

Tôi sẽ thử như sau:

  1. Bắt đầu GitBash
  2. Chỉnh sửa ~/.bashrctập tin của bạn
  3. Thêm các dòng sau vào tập tin

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. lưu và đóng tập tin
  2. Đóng GitBash
  3. Mở lại GitBash
  4. Nhập cụm mật khẩu của bạn

4
Để tham khảo trong tương lai, điều này cũng làm việc với zsh. Chỉ cần thêm nó vào.zshrc
Arda

2
Tôi tin rằng điều này giả định keyfile của bạn được gọi id_rsa. Nếu bạn có một tên tùy chỉnh, bạn nên sử dụng ví dụ. /usr/bin/ssh-add ~/.ssh/custom_filename
Juha Untinen

2
Bạn có thể giải thích những gì xảy ra với kịch bản này?
LeeR

2
@Lee nó khởi động ssh-agent nếu chưa chạy, đó là điều đảm bảo không hỏi bạn cụm mật khẩu ssh trên mỗi lần đẩy (nhiều hay ít).
Roland

Điều này chỉ chạy ssh-agent và thêm khóa vào mỗi lần đăng nhập. Bạn vẫn phải nhập mật khẩu mỗi lần đăng nhập. Vì vậy, ví dụ nếu bạn có tập lệnh ssh-ing và thực hiện các lệnh GIT, điều này thật không may là không hữu ích chút nào.
chuyến tàu


27

Hãy thử thêm phần này vào ~ / .ssh / config :

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

... giả sử khóa riêng của bạn được đặt tên là id_rsa


11
UseKeychain có chỉ có giá trị cho mac
Oz123

3
@ Oz123 những gì tương đương với cửa sổ
IgorGanapolsky

@ Oz123 Tôi nghĩ tương đương trên Windows là AddKeysToAgent, hãy kiểm tra câu trả lời này stackoverflow.com/questions/52423626/
Kẻ

6

Tôi đã có một vấn đề tương tự, nhưng các câu trả lời khác đã không khắc phục vấn đề của tôi. Tôi nghĩ rằng tôi sẽ tiếp tục và đăng bài này trong trường hợp người khác có một thiết lập khó khăn như tôi.

Hóa ra tôi có nhiều khóa và Git đã sử dụng sai trước. Nó sẽ nhắc tôi cho cụm mật khẩu của tôi và tôi sẽ nhập nó, sau đó Git sẽ sử dụng một khóa khác sẽ hoạt động (mà tôi không cần phải nhập cụm mật khẩu vào).

Tôi vừa xóa khóa mà nó đang sử dụng để nhắc tôi nhập cụm mật khẩu và bây giờ nó hoạt động!


5

Có vẻ như bạn có thể gặp rắc rối với chính SSH-Agent. Tôi sẽ thử khắc phục sự cố đó.

1) Bạn đã thực hiện ssh-add để thêm khóa vào SSH chưa?

2) Bạn có đóng cửa sổ đầu cuối giữa các lần sử dụng không, vì nếu bạn đóng cửa sổ, bạn sẽ phải nhập lại mật khẩu khi mở lại.


2
Sẽ rất tuyệt nếu thêm thông tin về cách giải quyết vấn đề đầu tiên Jeff Welling.
ranu

5

Nếu các giải pháp trên không hiệu quả với tôi, một điều cần kiểm tra là bạn thực sự cũng có khóa chung (thường là id_rsa.pub ). Đó là điều bất thường phải không, nhưng đó là nguyên nhân đối với tôi.

Để tạo khóa chung từ khóa riêng của bạn:

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

1

Tôi thử các giải pháp khác nhau nhưng không có gì giúp được. Nhưng bước này ( môi trường SSH GitBash của tôi luôn hỏi cụm mật khẩu của tôi, tôi có thể làm gì? ) Từ các đường nối của Bitbucket.com hoạt động tốt:

Ý tưởng là:

  1. bạn tạo ~/.bashrctập tin

  2. thêm theo kịch bản:

    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. chạy lại Bash


1

Một giải pháp khả thi khác không được đề cập ở trên là kiểm tra điều khiển từ xa của bạn bằng lệnh sau:

git remote -v

Nếu điều khiển từ xa không bắt đầu bằng git mà bắt đầu bằng https, bạn có thể muốn thay đổi nó thành git bằng cách làm theo ví dụ dưới đây.

git remote -v // origin is https://github.com/user/myrepo.git
git remote set-url origin git@github.com:user/myrepo.git
git remote -v // check if remote is changed
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.