Git trên Bitbucket: Luôn hỏi mật khẩu, ngay cả sau khi tải lên khóa SSH công khai của tôi


180

Tôi đã tải lên của mình ~/.ssh/id_rsa.pubđể khóa SSH Bitbucket của như giải thích , nhưng Git vẫn yêu cầu tôi cho mật khẩu của tôi ở mọi hoạt động (như git pull). Tôi đã bỏ lỡ một cái gì đó?

Nó là một kho lưu trữ riêng (ngã ba của kho lưu trữ riêng của người khác) và tôi đã nhân bản nó như thế này:

git clone git@bitbucket.org:Nicolas_Raoul/therepo.git

Đây là địa phương của tôi .git/config:

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

Trong cùng một môi trường có cùng khóa công khai, Git trên Github hoạt động tốt.
.sshrwx------, .ssh/id_rsa-rw-------, .ssh/id_rsa.pub-rw-r--r--

Câu trả lời:


265

Bạn có chắc chắn đã nhân bản nó bằng url ssh không?

Các url cho nguồn gốc nói url = https://Nicolas_Raoul@bitbucket.org/Nicolas_Raoul/therepo.gitnhư vậy nếu nó đang sử dụng https, nó sẽ yêu cầu mật khẩu bất kể các khóa ssh của bạn.

Vì vậy, những gì bạn muốn làm là như sau:

mở tập tin cấu hình của bạn trong repo hiện tại của bạn ..

vim .git/config

và thay đổi dòng với url từ

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

đến

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = git@bitbucket.org:Nicolas_Raoul/therepo.git

62
Bạn nói đúng, cảm ơn! Tôi đã có thể nhân bản với URL sai. Tôi đã thay thế URL .git/configbằng git@bitbucket.org:Nicolas_Raoul/therepo.gitvà bây giờ nó hoạt động!
Nicolas Raoul

8
và để thay đổi điều khiển từ xa bằng git stackoverflow.com/questions/2432764/
Alex Nolasco

3
Chính bitbucket đã gợi ý cho tôi https url khi tạo kho lưu trữ! Làm thế nào mà!
Denis Kniazhev

4
Hãy ghi nhớ nếu bitbucket của bạn là riêng tư, nếu bạn muốn sử dụng giao thức git, bạn cần thêm khóa ssh của bạn vào trang web của BitBologne trong cài đặt của bạn.
cevaris

7
Phải thay đổi URL thành ssh://git@bitbucket.org/userName/repoName.git- không có ssh://tiền tố, nó không hoạt động.
thử

34

Như đã giải thích ở đây , nếu bạn sao chép bằng url SSH , bạn không cần nhập tên người dùng / mật khẩu mỗi lần bạn đẩy / kéo. Kiểm tra câu trả lời trên của @manojlds

Nhưng nếu bạn muốn sao chép bằng HTTPS và muốn tránh nhập tên người dùng / mật khẩu mỗi lần, bạn có thể lưu thông tin đăng nhập vào bộ đệm bằng lệnh dưới đây:

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

Trong đó 3600 (giây) có nghĩa là 1 giờ, bạn có thể thay đổi theo yêu cầu của mình.


@atilkan Trong trường hợp đó, bạn có thể cung cấp thông tin phiên bản máy / HĐH và git của mình không? Và thông báo lỗi nếu có khi bạn cố gắng đặt cài đặt bộ đệm.
Ajeet Shah

Tôi đã nhân bản mẫu bitbucket của ai đó và đây là điều khiển từ xa của tôi. manecs-MBP:LocationTracker manec$ git remote -v origin https://Vysh1@bitbucket.org/Vysh1/locationtracker.git (fetch) origin https://Vysh1@bitbucket.org/Vysh1/locationtracker.git (push)
Banee Ishaque K

@AjeetShah nếu tôi nhập sai mật khẩu thì sao? nó cũng sẽ lưu mật khẩu sai?
anaval

@anaval Tại sao bạn không thử điều đó và sau đó thử nhập mật khẩu chính xác sau khi xóa hoặc tắt bộ đệm? Chỉnh sửa câu trả lời và cho chúng tôi biết bạn đã làm như thế nào :)
Ajeet Shah

19

Nó đã được trả lời ở trên. Tôi sẽ tóm tắt các bước để kiểm tra ở trên.

chạy git remote -vtrong dự án dir. Nếu đầu ra hiển thị url từ xa bắt đầu bằng https://abcthì bạn có thể cần mật khẩu tên người dùng mọi lúc.

Vì vậy, để thay đổi chạy url từ xa git remote set-url origin {ssh remote url address starts with mostly git@bitbucket.org:}.

Bây giờ hãy chạy git remote -v để xác minh url từ xa đã thay đổi.

Tham khảo: https://help.github.com/articles/changing-a-remote-s-url/


16

Xin chào các nhân viên của Google trong tương lai.

Trên MacOS> = High Sierra, khóa SSH không còn được lưu vào KeyChain vì lý do .

Sử dụng ssh-add -Kkhông còn tồn tại khởi động lại là tốt.

Dưới đây là 3 giải pháp khả thi .

Tôi đã sử dụng phương pháp đầu tiên thành công. Tôi đã tạo một tệp có tên configtrong ~/.ssh:

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

2
Điều này cần quan tâm nhiều hơn! Tôi đã dành nhiều năm để tìm kiếm một giải pháp và giải pháp đầu tiên với configtập tin /.sshhoàn hảo!
Kitson

1
Câu trả lời này đã giải quyết vấn đề của tôi trên MacOs: cd ~/.ssh+ ls+ nano config(tệp đã được tạo) + thêm mã vào câu trả lời của Vaiden. Sau đó kiểm soát X + Y để lưu tệp.
Sébastien Gicquel

9

Trong trường hợp yêu cầu HTTP, cũng có thể và cũng có thể dán trực tiếp thông tin đăng nhập (bằng mật khẩu) vào url:

http://username:password@bitbucket.org/...

Điều này sẽ tiết kiệm nỗi đau để cung cấp thông tin của bạn mỗi lần một lần nữa. Đơn giản sửa đổi .git / config của bạn (url).


10
Nhưng không an toàn. Và không hoạt động nếu mật khẩu có một số chữ cái như$%
Gank

3
Bất cứ ai đọc bình luận này, xin vui lòng nhớ: chỉ vì nó hoạt động , không có nghĩa là nó đúng . Nếu bạn đang sao chép mật khẩu của mình ở bất cứ đâu vĩnh viễn, thì bạn đã làm sai. Tương tự với những người luôn đặt quyền truy cập thư mục thành 777: dừng lại, suy nghĩ, nghiên cứu, hiểu và sau đó thực hiện đúng cách.
dKen

9

Không có câu trả lời nào trong số này giúp tôi, hóa ra vấn đề của tôi hơi khác. Đó là ssh đã yêu cầu mật khẩu của tôi mỗi lần, trước khi gửi khóa. Vì vậy, những gì tôi phải làm là liên kết mật khẩu của tôi với lệnh này:

ssh-add -K ~/.ssh/id_rsa

Sau đó, nó sẽ nhắc bạn nhập mật khẩu và lưu trữ nó. Đây có thể là giải pháp bạn đang tìm kiếm nếu mỗi lần bạn nhắc mật khẩu, nó nói

Nhập cụm mật khẩu cho khóa '/Users//.ssh/id_rsa':

Thêm thông tin ở đây

LƯU Ý: Tôi đã sử dụng thành công trên máy mac của mình, nhưng như @Rob Kwasowski đã chỉ ra bên dưới, Ktùy chọn chữ hoa là duy nhất cho mac. Nếu không có trên mac, bạn sẽ cần sử dụng chữ thường k(có thể cũng hoạt động với mac nhưng tôi chưa thử nghiệm).


1
Điều đó thật tuyệt, nhưng nó nên là chữ thường k:ssh-add -k ~/.ssh/id_rsa
Rob Kwasowski

bạn có thể giải thích?
stackPizer

Như đã giải thích ở đây: ssh.com/ssh/add , tùy chọn dòng lệnh là chữ thường k, không phải chữ hoa vì các tùy chọn này phân biệt chữ hoa chữ thường.
Rob Kwasowski

đúng nhưng tùy chọn chữ hoa K cũng sẽ thêm khóa vào móc khóa, trong khi chữ thường k sẽ chỉ thêm khóa vào tác nhân. Vì vậy, những gì tôi đang hỏi là 'tại sao bạn không muốn thêm chìa khóa vào móc khóa của bạn?'
stackPizer

1
Xin lưu ý về sự khác biệt của nền tảng, -Kdành riêng cho Mac: help.github.com/en/articles/error-ssh-add-illegal-option----k
Rob Kwasowski

5

Tôi nghĩ rằng đó Step 1là cho WindowsStep 2là cho Linuxnhưng bạn quên nó đề cập đến nó đúng.
Ajeet Shah

Tôi đã chạy 3 bước trên hộp Windows của mình và nó đã hoạt động.
webdev5

2
Trong trường hợp đó, tôi muốn thêm nó vào hệ điều hành Linux, chúng ta chỉ cần bước 2 và bước 3 để có hiệu quả tương tự :)
Ajeet Shah

4

Sau đây giả định truy cập dòng lệnh thông qua iTerm / Terminal đến bitbucket.

Đối với MacOS Sierra 10.12.5, hệ thống của tôi có một vấn đề tương đương - yêu cầu mật khẩu SSH của tôi trên mỗi kết nối với bitbucket.

Vấn đề liên quan đến các bản cập nhật OpenSSH trong macOS 10.12.2, được mô tả ở đây trong Lưu ý kỹ thuật TN2449 .

Bạn rất có thể muốn điều chỉnh giải pháp của mình, nhưng cách sau sẽ hoạt động khi được thêm vào tệp ~ / .ssh / config:

Host *
    UseKeychain yes

Để biết thêm thông tin về cấu hình ssh, hãy xem các trang man cho ssh_config:

% man ssh_config

Một điều khác: có một bài viết tốt về siêu người dùng ở đây thảo luận về vấn đề này và các giải pháp khác nhau tùy thuộc vào nhu cầu và thiết lập của bạn.


2

Tôi đã sao chép kho lưu trữ bằng URL HTTPS thay vì URL SSH do đó ngay cả sau khi thêm Khóa SSH, nó đã hỏi tôi mật khẩu trên Bash Shell.

Tôi chỉ chỉnh sửa ./.git/configtệp và thay đổi giá trị của urlbiến bằng cách thay thế https://thànhssh://

Ví dụ

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

Thay đổi để:

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

1

Bạn có thể cần kiểm tra kỹ tệp nhận dạng SSH của mình. Bạn có thể hướng dẫn BitBucket xem xét một khóa riêng khác / không chính xác với khóa chung tương đương mà bạn đã lưu trên BitBucket.

Kiểm tra nó với tail ~/.ssh/config- bạn sẽ thấy một cái gì đó tương tự như:

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

Hãy nhớ rằng, việc thêm các danh tính bổ sung (như công việc và nhà) có thể được thực hiện bằng ssh-addlệnh, ví dụ:

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

Khi bạn đã xác nhận khóa riêng nào đang được xem xét cục bộ, bạn có thể lấy khóa công khai của mình, trong trường hợp này:

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

Và dán mật mã đó lên BitBucket. Việc đẩy git của bạn sẽ ngay bây giờ (miễn là bạn đang sử dụng bản sao SSH như các câu trả lời đã nói ở trên) được cho phép mà không cần mật khẩu, vì thiết bị của bạn là một thân thiện được công nhận.

Hy vọng điều này sẽ giúp làm sáng tỏ nó cho một ai đó.


0

Với tôi, mặc dù tôi đã chạy 'git clone ssh: //git@stash.xxx.com: 7999 / projName / projA.git' Tôi vẫn được nhắc nhập mật khẩu cho repo mới này mà tôi đã nhân bản, vì vậy bằng cách so sánh .git của nó / config tập tin vào các repos khác hoạt động, Hóa ra đó là url trong phần [remote "origin"], nó được đặt thành đường dẫn ssh ở trên cho repo mới, nhưng được đặt thành https: xxx cho công việc đang hoạt động .


0

Tôi đã có sự kỳ lạ khác xung quanh việc đăng nhập. Tôi đã bắt gặp một thứ gì đó dường như hoàn toàn ngu ngốc nhưng hoạt động trong trường hợp của tôi. Chỉ cần đi đến móc khóa của MacOS. Tìm biểu tượng khóa đăng nhập trong thanh bên. Nhấn vào đây để đăng xuất và sau đó nhấp để đăng nhập. Nghe có vẻ ngu ngốc nhưng nó đã giải quyết vấn đề của tôi. Đáng để thử.

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.