Làm cách nào để thực hiện thao tác `git pull` mà không cần nhập lại mật khẩu SSH?


96

Có thể cấu hình git/sshđể tôi không phải nhập cụm mật khẩu mỗi khi muốn thực hiện git pullkhông? Lưu ý rằng repo là một repo riêng tư trên github.

Hoặc, cách khác, thực hành tốt nhất để tự động triển khai mã từ repo Github riêng tư sẽ là gì?

Chi tiết bổ sung: Phiên bản EC2 chạy AMI công khai dựa trên Fedora.


2
Có thể có bản sao của Định cấu hình Git qua SSH
Mudgar

Bạn có giải pháp của vấn đề này?
nim

Kể từ git 2.11+ (Q4 2016) sử dụng libsecret là một cách khác: stackoverflow.com/a/40312117/8477066
Hielke Walinga

Câu trả lời:


69

Hãy xem liên kết này https://help.github.com/articles/working-with-ssh-key-passphrases/

Nhưng tôi không muốn nhập một cụm mật khẩu dài mỗi khi tôi sử dụng khóa!

Tôi cũng không! Rất may, có một công cụ nhỏ tiện lợi được gọi là ssh-agentcó thể lưu cụm mật khẩu của bạn một cách an toàn để bạn không phải nhập lại. Nếu bạn đang sử dụng OSX Leopard trở lên, các khóa của bạn có thể được lưu trong chuỗi khóa của hệ thống để giúp cuộc sống của bạn trở nên dễ dàng hơn. Hầu hết các cài đặt linux sẽ tự động khởi động ssh-agent cho bạn khi bạn đăng nhập.


3
hơi lo lắng khi trả lời một người có danh tiếng 17,7k; tôi đã hiểu sai câu hỏi ... ;-)
Fredrik Pihl

3
lo lắng? yên tâm: đại đa số người ở đây được lương khá tốt ... và những người không phải là, tốt, họ có vấn đề lớn hơn tôi :)
jldupont

2
Liên kết này là hữu ích trong việc giải thích những gì lệnh để chạy theo thứ tự để có được mật khẩu của bạn được lưu trong ssh-agent: rabexc.org/posts/using-ssh-agent
Mateus Gondim

Tôi không muốn sử dụng chìa khóa. Đơn giản, tôi có user \ pass và tôi muốn lưu nó ở phía máy khách git
nim

Tại sao liên kết chỉ cung cấp các tùy chọn Mac / Widows? Tôi muốn git pull trên máy chủ unix mà không cần nhập lại pass. quản lý để làm cho nó hoạt động cho một dự án lịch sử nhưng không thể nói những gì tôi đã làm ở đó. Có phải điểm mà khi bạn ssh đến một máy unix từ xa, khóa sẽ được chuyển và nó được sử dụng làm khóa git pull (hoặc vcs của nhà soạn nhạc riêng)? Tôi tin rằng tôi đang hiểu sai điều gì đó ở đây. Bất kỳ giúp đánh giá cao :)
trainoasis

29

Tôi đã bật bộ nhớ đệm mật khẩu như được mô tả ở đây:

https://help.github.com/articles/caching-your-github-password-in-git/#platform-linux

Để lưu mật khẩu vào bộ nhớ cache trong một tháng:

git config --global credential.helper 'cache --timeout=2628000'

Cảm ơn, temuri- Tôi đã tìm kiếm chi tiết chính xác ở khắp mọi nơi. Nó không hoạt động, nhưng tài liệu dường như không đề cập đến nó chỉ dành cho HTTPS.
Mike Emery

2
Nếu bạn sử dụng mật khẩu ( không phải cụm mật khẩu với tệp khóa) cho URL dựa trên SSH của repo Git từ xa, bạn hoàn toàn không thể lưu mật khẩu. Nhưng tôi nhận thấy rằng sau khi phát hành bất kỳ lệnh git nào, bạn có thể nhập ngay mật khẩu và nhấn Enter . Bạn không cần đợi lời nhắc mật khẩu xuất hiện.
ADTC

1
git vẫn hỏi pass
nim

12

Thử cái này:

git config credential.helper store

Bạn sẽ phải nhập mật khẩu của mình một lần, sau đó nó được lưu trữ trong một thư mục bên trong thư mục gốc.

Như các nhận xét đã chỉ ra, Điều này KHÔNG hoạt động với mật khẩu SSH, chỉ dành cho mật khẩu HTTPS.


1
@nim Điều đó không có nghĩa là bạn nên từ chối câu trả lời, tôi đã đề xuất những gì phù hợp với tôi và ai đó có thể thấy hữu ích.
Yankee

Nó không có mật khẩu lưu. Tôi thử nó và không có kết quả. Nếu bạn từ xa như thế này ssh: // name @ ip / path
nim

1
Điều này hoạt động nếu bạn đang tìm cách lưu trữ mật khẩu xác thực cơ bản HTTP.
Phil

4
Điều này KHÔNG hoạt động đối với mật khẩu SSH, chỉ dành cho mật khẩu HTTPS.
Eliezer Berlin

hoạt động tốt cho https. Bạn chỉ cần nhập điều này vào. Lần tới sẽ là lần cuối cùng bạn cần nhập diễn giải. Lần sau, mật khẩu sẽ được ghi nhớ bằng git.
Jonathan

7

Tình huống của bạn hiện đã được khắc phục, tuy nhiên đối với tôi, thực tế là tôi có nhiều hơn một chìa khóa trong ~/.ssh/

Để giải quyết sự cố, tôi phải tạo một tệp có tên ~/.ssh/configvà thêm dòng:

IdentityFile ~/.ssh/my_key2_rsa

nơi ~/.ssh/my_key2_rsalà chìa khóa của tôi.


1
Cảm ơn vì điều này, của tôi id_rsaid_rsa.pubcác tệp có tên tùy chỉnh, đó là lý do tại sao git sẽ không bao giờ nhận ra nó. ref: linux.die.net/man/5/ssh_config
lasec0203

5

Tôi không biết tại sao vẫn chưa có ai báo cáo điều này. Nhưng cách tiếp cận đơn giản nhất là chỉ cần thêm một dòng AddKeysToAgent yestrên đầu tệp .ssh / config. Tất nhiên là ssh-agentphải chạy trước. Nếu nó không chạy (kiểm tra bằng lệnh ssh-agenttrên thiết bị đầu cuối), sau đó chỉ cần chạy nóeval $(ssh-agent)

Tôi có thể xác nhận rằng điều này hoạt động, bởi vì trong dự án của tôi với rất nhiều mô-đun con và đối với mỗi mô-đun con được sao chép, tôi phải nhập cụm mật khẩu ssh của mình. Sau thủ thuật trên, tôi không cần phải làm điều đó nữa.

Nguồn của giải pháp là /ubuntu/362280/enter-ssh-passphrase-once/853578#853578


Đây hoàn toàn là câu trả lời chính xác. Hơn nữa, để chạy ssh-agent, người ta có thể sử dụng dịch vụ người dùng systemd
someonewithpc
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.