Tại sao git không thể nhớ cụm mật khẩu của tôi trong Windows


144

Tôi mới bắt đầu sử dụng git và tôi không thể nhớ mật khẩu của mình Tôi đang sử dụng cmd.exe nâng cao và máy chủ git của tôi là github và tôi đã tạo một khóa ssh như hướng dẫn trên github

nhưng tôi vẫn nhận được

*\subnus.mvc>git push origin master
Enter passphrase for key '/c/Users/Subnus/.ssh/id_rsa':

Tôi đã không sử dụng msysgit cho mình, nhưng tác nhân xác thực cuộc thi thể hữu ích.
Cebjyre

1
Tôi đã thử tất cả mọi thứ và sau đó tôi thấy điều này làm việc.
Blake Niemyjski

1
Windows 10 xuất xưởng với OpenSSH một thời gian. Kích hoạt dịch vụ ssh-agent, sử dụng ssh-add để thêm khóa của bạn vào cửa hàng ssh và đặt GIT_SSHtrong môi trường của bạn (nếu cần) và git / ssh sẽ ghi nhớ cụm mật khẩu của bạn thông qua ssh-agent. Xem câu trả lời của tôi dưới đây để được hướng dẫn chi tiết hơn.
d3r3kk

1
2019, chỉ cần cài đặt git trên windows 10 và git yêu cầu mật khẩu một lần và ghi nhớ nó.
Jean-François Fabre

@ Jean-FrançoisFabre Bạn có thể không sử dụng OpenSSL.
RoadRunner

Câu trả lời:


206

Tôi nhận ra rằng câu hỏi này sẽ xuất hiện từ hai tuổi, nhưng tôi có cùng một vấn đề và một số câu trả lời ở đây không hoàn toàn trả lời câu hỏi cho tôi. Đây là hai giải pháp từng bước, tùy thuộc vào việc bạn có sử dụng TortoiseGit ngoài msysgit hay không.

Giải pháp đầu tiên Giả sử Windows, msysgit và PuTTY.

  1. Cài đặt msysgit và PuTTY theo hướng dẫn.
  2. (Tùy chọn) Thêm PuTTY vào đường dẫn của bạn. (Nếu bạn không làm điều này, thì mọi tham chiếu đến các lệnh PuTTY bên dưới phải được thêm tiền tố với đường dẫn đầy đủ để thực thi thích hợp.)
  3. Nếu bạn chưa làm như vậy, thì hãy tạo một hàm băm chính như được hướng dẫn tại GitHub hoặc theo chỉ dẫn của máy chủ Git của bạn.
  4. Một lần nữa, nếu bạn chưa làm như vậy, hãy chuyển đổi khóa của bạn để sử dụng với trang cuộc thi của PuTTY bằng puttygen.exe . Các hướng dẫn có trong tài liệu của PuTTY, trong hướng dẫn hữu ích này và một số địa điểm khác trong không gian ảo.
  5. Run PuTTY pageant.exe , mở file .ppk của bạn ( "Add Key"), và cung cấp mật khẩu của bạn cho chìa khóa của bạn.
  6. Truy cập hộp thoại biến môi trường của Windows (Nhấp chuột phải vào "Máy tính", Nhấp vào "Thuộc tính", Nhấp vào "Cài đặt hệ thống nâng cao" hoặc tab "Nâng cao", nhấp vào "Biến môi trường"). Thêm biến môi trường sau:

    GIT_SSH = C: \ full \ path \ to \ plink.exe

    Thay thế "C: \ full \ path \ to" bằng đường dẫn cài đặt đầy đủ thành PuTTY, nơi tìm thấy plink.exe. Có lẽ tốt nhất là thêm nó vào phần "Biến người dùng". Ngoài ra, hãy đảm bảo rằng đường dẫn bạn sử dụng để plink.exe khớp với đường dẫn bạn sử dụng cho Pageant (pageant.exe). Trong một số trường hợp, bạn có thể có một vài cài đặt PuTTY vì nó có thể được cài đặt cùng với các ứng dụng khác. Sử dụng plink.exe từ một cài đặt và pageant.exe từ một cài đặt khác có thể sẽ gây rắc rối cho bạn.

  7. Mở một dấu nhắc lệnh.

  8. Nếu bạn đang cố gắng kết nối với kho git được lưu trữ tại Github.com thì hãy chạy lệnh sau:

    plink.exe git@github.com

    Nếu kho git mà bạn đang cố gắng kết nối được lưu trữ ở một nơi khác, thì hãy thay thế git@github.com bằng một tên người dùng và URL thích hợp. (Giả sử Github) Bạn nên được thông báo rằng khóa máy chủ của máy chủ không được lưu trong bộ nhớ cache và được hỏi liệu bạn có tin tưởng nó không. Trả lời với một y . Điều này sẽ thêm khóa máy chủ của máy chủ vào danh sách các máy chủ đã biết của PuTTY. Nếu không có bước này, lệnh git sẽ không hoạt động đúng. Sau khi nhấn enter, Github thông báo cho bạn rằng Github không cung cấp quyền truy cập shell. Điều đó tốt ... chúng tôi không cần nó. (Nếu bạn đang kết nối với một số máy chủ khác và nó cung cấp cho bạn quyền truy cập shell, có lẽ tốt nhất là chấm dứt liên kết mà không làm gì khác.)

  9. Tất cả đã được làm xong! Các lệnh Git bây giờ sẽ hoạt động từ dòng lệnh. Bạn có thể muốn trang pagete.exe tự động tải tệp .ppk của bạn khi khởi động , tùy thuộc vào tần suất bạn sẽ cần.

Giải pháp thứ hai Giả sử Windows, msysgit và TortoiseGit.

TortoiseGit đi kèm với các tệp thực thi PuTTY và một phiên bản sửa đổi đặc biệt của plink (được gọi là TortoisePlink.exe) sẽ giúp mọi việc dễ dàng hơn.

  1. Cài đặt msysgit và TortoiseGit theo hướng dẫn.
  2. Nếu bạn chưa làm như vậy, thì hãy tạo một hàm băm chính như được hướng dẫn tại GitHub hoặc theo chỉ dẫn của máy chủ Git của bạn.
  3. Một lần nữa, nếu bạn chưa làm như vậy, hãy chuyển đổi khóa của bạn để sử dụng với pagG.exe của TortoiseGit bằng cách sử dụng puttygen.exe của TortoiseGit . Các hướng dẫn có trong tài liệu của PuTTY, trong hướng dẫn hữu ích được liên kết đến trong giải pháp đầu tiên và một số địa điểm khác trong không gian ảo.
  4. Run TortoiseGit pageant.exe , mở file .ppk của bạn ( "Add Key"), và cung cấp mật khẩu của bạn cho chìa khóa của bạn.
  5. Truy cập hộp thoại biến môi trường của Windows (Nhấp chuột phải vào "Máy tính", Nhấp vào "Thuộc tính", Nhấp vào "Cài đặt hệ thống nâng cao" hoặc tab "Nâng cao", nhấp vào "Biến môi trường"). Thêm biến môi trường sau:

    GIT_SSH = C: \ full \ path \ to \ TortoisePlink.exe

    Thay thế "C: \ full \ path \ to" bằng đường dẫn cài đặt đầy đủ vào TortoiseGit, nơi tìm thấy TortoisePlink.exe. Có lẽ tốt nhất là thêm nó vào phần "Biến người dùng". Ngoài ra, hãy đảm bảo rằng đường dẫn bạn sử dụng đến TortoisePlink.exe khớp với đường dẫn bạn sử dụng cho Pageant (pageant.exe). Trong một số trường hợp, bạn có thể có một vài cài đặt PuTTY vì nó có thể được cài đặt cùng với các ứng dụng khác. Sử dụng TortoisePlink.exe từ bản cài đặt TortoiseGit và pageant.exe từ một bản cài đặt khác của một ứng dụng khác (hoặc từ bản cài đặt PuTTY độc lập) có thể sẽ gây rắc rối cho bạn.

  6. Tất cả đã được làm xong! Các lệnh Git bây giờ sẽ hoạt động từ dòng lệnh. Lần đầu tiên bạn cố gắng kết nối với kho git của mình, bạn có thể sẽ được thông báo rằng khóa máy chủ của máy chủ không được lưu trong bộ nhớ cache và hỏi bạn có tin tưởng máy chủ không. Bấm vào "Có". (Đây là TortoisePlink.exe đang hoạt động.)

    Bạn có thể muốn trang pagete.exe tự động tải tệp .ppk của bạn khi khởi động , tùy thuộc vào tần suất bạn sẽ cần.

Giải pháp thứ ba Giả sử Window, msysgit và dấu nhắc lệnh gốc.

  1. Cài đặt msysgit
  2. Đảm bảo cho phép git được sử dụng trên dấu nhắc lệnh MS-DOS
  3. Chạy start-ssh-agent
  4. Nhập cụm mật khẩu SSH
  5. Tất cả đã được làm xong! Các lệnh Git bây giờ sẽ hoạt động trong dấu nhắc lệnh gốc.

3
Nếu bạn có cả GitExtensions và TortoiseGit, mỗi phiên bản đều có phiên bản putty riêng, hãy đảm bảo bạn đặt biến môi trường GIT_SSH theo đường dẫn của plink cho cuộc thi mà bạn thực sự đang sử dụng.
shovavnik

15
Chỉ trong trường hợp người khác gặp phải lỗi ngu ngốc này: hãy đảm bảo bạn đang sử dụng định dạng URL từ xa SSH (git @ host: accountname / reponame.git) chứ không phải URL HTTPS nếu không nó sẽ tiếp tục yêu cầu mật khẩu đó ...
dain

Khi tôi chạy plink.exe git@github.com, tôi nhận được "LALI L FATI: Máy chủ đột ngột đóng kết nối mạng"
Brett

4
Lưu ý: phương thức ba đã được ngược dòng vào msysgit để bạn chỉ cần nhập start-ssh-agentdòng lệnh để có được nó để lưu cụm mật khẩu SSH.
Matt Clarkson

6
Giải pháp thứ ba chỉ hoạt động cho đến khi đóng dấu nhắc lệnh và chỉ cho dấu nhắc lệnh đó - tất cả các CMD khác vẫn yêu cầu cụm mật khẩu. Ngoài ra tất cả các máy khách khác (VS, Mã VS) không giao tiếp với git từ xa.
Dima

21

Mỗi lần tôi thiết lập một máy tính để bàn mới, tôi quên các hướng dẫn này, vì vậy tôi sẽ thêm một câu trả lời khác ở đây vì tôi thường xuyên vấp phải nó!


Bước nhanh cho người dùng thiếu kiên nhẫn như tôi

  1. Kích hoạt OpenSSH Authentication Agentdịch vụ và làm cho nó bắt đầu tự động.
  2. Thêm khóa SSH của bạn vào tác nhân với ssh-adddòng lệnh.
  3. Kiểm tra tích hợp git, nếu nó vẫn yêu cầu cụm mật khẩu của bạn, hãy tiếp tục.
  4. Thêm biến môi trường $ENV:GIT_SSH=C:\Windows\System32\OpenSSH\ssh.exevào phiên của bạn hoặc vĩnh viễn vào môi trường người dùng của bạn.

Các bước chi tiết: Tổng quan

Windows đã được vận chuyển với OpenSSH một thời gian rồi. Nó bao gồm tất cả các bit cần thiết để ssh hoạt động cùng với Git, nhưng dường như vẫn cần một số TLC trước khi nó hoạt động hoàn toàn 100%. Đây là các bước tôi đã thực hiện thành công kể từ Windows ver 10.0.18362.449 (bạn có thể xem phiên bản Windows 10 của mình bằng cách mở trình bao cmd.exe và nhập ver).

Tôi giả sử ở đây rằng bạn đã thiết lập khóa SSH và được đặt tại ~/.ssh/id_rsa

Kích hoạt dịch vụ ssh-agent trên hộp Windows 10 của bạn.

  1. Bắt đầu-> Nhập 'Dịch vụ' và nhấp vào Ứng dụng Dịch vụ xuất hiện.
  2. Tìm OpenSSH Authentication Agentdịch vụ trong danh sách.
  3. Nhấp chuột phải vào OpenSSH Authentication Agentdịch vụ và chọn 'Thuộc tính'.
  4. Thay đổi Startup type:thành Automatic.
  5. Nhấn vào Startnút để thay đổi trạng thái dịch vụ thành Running.
  6. Loại bỏ hộp thoại bằng cách nhấp OKvà đóng ứng dụng Dịch vụ.

Thêm chìa khóa của bạn vào ssh-agent

  1. Mở vỏ ưu tiên của bạn (Tôi sẽ sử dụng Windows Powershell trong ví dụ này, cũng áp dụng cho Powershell Core) .
  2. Thêm khóa SSH của bạn vào ssh-agent: ssh-add (bạn có thể thêm đường dẫn đến khóa của mình làm đối số đầu tiên nếu nó khác với mặc định) .
  3. Nhập cụm mật khẩu của bạn nếu / khi được nhắc làm như vậy.

Hãy thử Git + SSH

  1. Mở vỏ của bạn (một lần nữa, tôi đang sử dụng Powershell) và sao chép một repo.git clone git@github.com:octocat/Spoon-Knife
  2. Nếu bạn thấy lời nhắc này, hãy tiếp tục đến phần tiếp theo:
Enter passphrase for key '/c/Users/your_user_name/.ssh/id_rsa':

Đặt GIT_SSHbiến môi trường của bạn

Trong bất kỳ phiên nào, bạn chỉ cần đặt biến môi trường này và lời nhắc cho cụm mật khẩu của bạn sẽ dừng lại và ssh sẽ sử dụng ssh-agentthay mặt bạn. Ngoài ra, bạn có thể đặt cụm mật khẩu của mình vào môi trường người dùng vĩnh viễn.

Để chỉ đặt GIT_SSHtrong trình bao hiện tại:

  1. Mở vỏ ưu tiên của bạn. (Powershell cho tôi)
  2. Đặt biến môi trường GIT_SSH thành thích hợp ssh.exe:$Env:GIT_SSH=$((Get-Command -Name ssh).Source)
  3. Thử lại các bước trong Thử Git + SSH ở trên.

Để đặt GIT_SSHvĩnh viễn

  1. Mở File Explorer. Bắt đầu-> gõ 'File Explorer' và nhấp vào nó trong danh sách.
  2. Nhấp chuột phải vào 'PC này' và nhấp vào 'Thuộc tính'.
  3. Nhấp vào 'Cài đặt hệ thống nâng cao'.
  4. Nhấp vào nút 'Biến môi trường ...'.
  5. Trong 'Biến người dùng cho your_user_name' bấm Mới ...
  6. Đặt Variable name:trường thành GIT_SSH
  7. Đặt Variable value:trường thành đường dẫn đến ssh.exe (thông thường C:\Windows\System32\OpenSSH\ssh.exe).
  8. Bấm OK để bỏ qua hộp thoại Biến người dùng mới.
  9. Bấm OK để bỏ qua hộp thoại Biến môi trường.
  10. Thử lại các bước trong Thử Git + SSH ở trên.

Lưu ý rằng điều này có thể sẽ thay đổi với các bước / quy trình mới khi Windows 10 tiến triển và khi tôi tìm hiểu thêm. Tôi sẽ cố gắng để cập nhật thông tin này, tôi mong được phản hồi trong các bình luận.


3
Đây là câu trả lời đầy đủ nhất kể từ 1/31/2020, ít nhất là cho Windows. Không cần cài đặt PUTTY hay bất cứ thứ gì.
Jake

Đã đồng ý. Có vẻ như hỗ trợ tích hợp cuối cùng đã ở đây.
Eron Lloyd

Huyền thoại! Điều này đã giải quyết vấn đề của tôi. Tìm kiếm một giải pháp trong một thời gian, thử những thứ khác nhau và đây là điều tuyệt vời nhất cho vấn đề này
Collin

Cảm ơn bạn đã có một câu trả lời hay và một câu trả lời cho tôi rất có thể là vài giờ lộn xộn. +1
Tức giận 84

20

Đối với bất kỳ ai cần hướng dẫn chi tiết hơn, hãy xem trang này: http://help.github.com/usiness-with-key-passph cụm /


Chính xác những gì tôi cần cho việc sử dụng msysgitvỏ.
arthurakay

1
Làm việc cho tôi khi sử dụng Ứng dụng máy tính để bàn Git Bash. Tôi đã sử dụng notepad ~/.profilevà sao chép nội dung từ liên kết đó, khởi động lại Git Bash, nhập mật khẩu của mình, thu lợi nhuận ...
Daryn

Tôi đã theo dõi phần "Tự động khởi chạy ssh-agent trên Git cho Windows" (sử dụng git 2.x trên Win 10) nhưng nó vẫn hỏi tôi mật khẩu mọi lúc. Theo giải pháp đầu tiên (putty) từ câu trả lời được chấp nhận đã sửa lỗi này cho tôi.
jakub.g

20

Trong trường hợp bạn đang sử dụng Git bash trong Windows, bạn có thể thực hiện như sau:

eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa

nó sẽ yêu cầu cụm từ thông qua trong lệnh thứ hai, và đó là nó. Mỗi hành động bổ sung bạn sẽ cần thực hiện (mà một khi đã yêu cầu cụm từ vượt qua) sẽ không yêu cầu bạn cho cụm từ vượt qua (xem ví dụ trong ảnh chụp màn hình bên dưới):

thêm cụm từ trong Git bash trên Windows


2
Điều này cũng hoạt động trong hệ thống con Ubuntu trong Windows 10.
cuộc họp

1
lưu ý rằng nếu khóa của bạn được đặt ở nơi khác, bạn có thể thay thế ~ / .ssh / * _ rsa bằng đường dẫn của tệp * .pem
alex_danielssen

13

Một giải pháp bổ sung trong 5 năm, 8 tháng và 6 ngày sau khi câu hỏi được đăng sẽ không phải là một ý tưởng tồi.

LƯU Ý: Giả sử bạn đang sử dụng máy tính windows.

  1. Tải về git-cert-winstore .
  2. Chạy đi! Nếu bạn có GIT trong PATHbiến môi trường của bạn , nó sẽ hoạt động. Nếu bạn không, hãy chạy git-credential-winstore -i C:\Path\To\Git.exe.

Lần tới khi bạn cố gắng cam kết với một kho lưu trữ, bạn sẽ được nhắc nhập thông tin đăng nhập của bạn. Đó nên là nó. Bạn sẽ không được yêu cầu thông tin đăng nhập của bạn nữa cho đến khi bạn thay đổi mật khẩu.


Chỉ cho kiến ​​thức của bạn ... Thông tin đăng nhập của bạn được lưu trữ trong Cửa hàng Thông tin Windows

Bạn đang lưu trữ thông tin của tôi ở đâu?

Ứng dụng này chỉ sử dụng Cửa hàng Thông tin Windows hiện có để giữ thông tin đăng nhập của bạn. Bạn có thể xem thông tin đăng nhập được lưu trữ bằng cách truy cập Bảng điều khiển> Tài khoản người dùng> Trình quản lý thông tin xác thực và chọn "Thông tin xác thực Windows". Các mục bắt đầu "git:" là từ git-cert-winstore.


8
Giải pháp này dường như không hoạt động với SSH repos, chỉ HTTPS. / Angryface
JasonCoder 16/07/2015

8

Nếu bạn đặt mật khẩu cho tệp chính của mình, bạn sẽ luôn cần nhập mật khẩu đó khi kết nối. Nếu bạn tạo một khóa không mật khẩu, thì bạn sẽ không phải nhập nó mỗi lần, tuy nhiên, bất kỳ ai có quyền truy cập vào tệp khóa của bạn giờ đây đều có thể kết nối với tài khoản github của bạn.

đại lý ssh cũng có thể làm việc. Hãy thử chạy nó và xem nếu nó sẽ nhớ cụm mật khẩu của bạn.


việc chạy ssh-keygen -psẽ cho phép OP không đặt cụm mật khẩu
luchosrock

Vẫn nhắc mật khẩu.
Versedi

7

[chỉnh sửa - đọc sai câu hỏi, đây là câu trả lời cho một vấn đề liên quan. để lại phiên bản rephrased cho hậu thế]

Trường hợp của tôi là tôi đã cố gắng đẩy tới một repo được lưu trữ trên một trong các máy chủ của chúng tôi. Bất cứ khi nào tôi cố gắng thực hiện một cú đẩy, git sẽ hỏi tôi mật khẩu của tôi (nb - mật khẩu, không phải cụm mật khẩu cho khóa riêng của tôi).

Bằng cách thêm khóa công khai của tôi vào các khóa được ủy quyền trên máy chủ, tôi có thể nhận được các lần đẩy không cần mật khẩu đến máy chủ đó. Và, vì không có cụm mật khẩu trên khóa riêng của tôi (đó là thông lệ xấu btw!) Tôi không cần phải nhập bất cứ thứ gì vào.

Đây là lệnh để thêm khóa công khai của bạn vào máy chủ. Nó giả sử người dùng gitlà người dùng trên máy chủ.

cat .ssh/id_rsa.pub | ssh git@GIT_MASTER_IP 'cat >> .ssh/authorized_keys'

Bạn có thể đạt được điều tương tự bằng cách đăng nhập vào máy chủ và tự thêm khóa công khai vào tệp tại ~/.ssh/authorized_keys


Bạn có thể chuyển đổi nó thành một mô tả có thể sử dụng được bởi một người không có quyền truy cập vào shell? Ví dụ, những gì chúng ta nên đặt trong ủy quyền bằng cách sử dụng notepad hoặc tương tự?
John Little

4

Tôi nhận ra rằng điều này đã quá hạn vài năm, nhưng tôi tình cờ gặp câu hỏi này khi cố gắng tìm giải pháp cho nó và tôi đã tìm thấy thứ gì đó phù hợp với tất cả các cấp độ chuyên môn, vì vậy tôi nghĩ tôi muốn chia sẻ.

GitHub cung cấp trình cài đặt rất hữu ích giúp mọi thứ dễ dàng và dễ dàng: https://help.github.com/articles/caching-your-github-password-in-git/


Xin lưu ý rằng đây là lưu mật khẩu GitHub của bạn , không phải là mật khẩu khóa GPG.
Thẩm phán2020

4

Giả sử bạn muốn sử dụng Git Bash thuần túy giải pháp mà không cần sử dụng TortoiseGit hoặc PuTTY. Ngoài ra, bạn không muốn lưu trữ cụm mật khẩu của mình vĩnh viễn vì nó gần giống như khi bạn tạo khóa SSH mà không cần cụm mật khẩu ở vị trí đầu tiên. Nhưng bạn vẫn muốn sử dụng một số bộ nhớ đệm.

Đối với mục đích lưu trữ, ssh-agentquy trình được sử dụng, được bao gồm trong phân phối Git Bash. Quá trình này không được bắt đầu theo mặc định, vì vậy nó cần được khởi chạy trước. Đối với bất kỳ khóa SSH nào được lưu trong bộ nhớ cache, chúng nên được thêm vào quy trình này vớissh-add lệnh sẽ nhắc bạn nhập cụm mật khẩu của khóa và lưu nó vào bộ nhớ.

Hạn chế của các giải pháp khác:

  • Tự động khởi chạy ssh-agentnhư trong bài viết của GitHub yêu cầu cụm mật khẩu ngay từ đầu khi bạn khởi chạy Git Bash, bất kể bạn có cần sử dụng khóa SSH của mình trong phiên này hay không. Nếu bạn đang làm việc với repo cục bộ của mình ngày hôm nay, có lẽ bạn chỉ muốn cung cấp cụm mật khẩu khi thực sự cần thiết (ví dụ: khi tương tác với repo từ xa).
  • Nếu bạn khởi chạy ssh-agent thích trong bài viết của GitLab,eval $(ssh-agent -s) có lẽ bạn đã mệt mỏi với việc gõ nó mỗi lần. Cuối cùng, có thể bạn đã thêm hai dòng đó vào .bashrccấu hình của mình để tự động khởi chạy. Nhược điểm cũng giống như trên cộng với một nhược điểm: mỗi lần bạn khởi chạy thiết bị đầu cuối Git Bash mới, bạn sẽ nhận được một quy trình ssh-agent bổ sung (tập lệnh bash của GitHub kiểm tra xem quá trình đó đã bắt đầu chưa).
  • Giống như hai cách trên nhưng đặc biệt là khi bạn có các khóa SSH riêng cho các máy chủ khác nhau, ví dụ: một cho GitHub và một cho GitLab, vì vậy việc cung cấp tất cả chúng cùng một lúc là khó chịu và bất tiện.

Vì vậy, giải pháp này dành cho những người tự hỏi làm thế nào để khiến Git Bash chỉ yêu cầu một cụm mật khẩu một lần cho mỗi phiên Windows và chỉ khi thực sự cần thiết. Nó tương tự như hành vi quản lý cụm mật khẩu với các cam kết GnuPG tự động ký bằng cách sử dụng default-cache-ttl.

Định cấu hình SSH để yêu cầu cụm mật khẩu một lần, khi cần, chỉ sử dụng Git Bash

  1. Đầu tiên, chúng tôi muốn tự động khởi chạy ssh-agentkhi bắt đầu trình bao Git Bash. Chúng tôi sẽ sử dụng tập lệnh của GitHub đã sửa đổi để kiểm tra xem quy trình đã bắt đầu chưa, nhưng chúng tôi không muốn nó vào ssh-addkhóa ngay lập tức. Tập lệnh này đi đến ~/.bashrchoặc ~/.profilehoặc ~/.bash_profile( ~là thư mục chính của Người dùng của bạn như C:\Users\Username- chạy cd ~và sau đó pwdđể Git Bash in nó ra):

    ### Start ssh-agent
    
    env=~/.ssh/agent.env
    
    agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
    
    agent_start () {
        (umask 077; ssh-agent >| "$env")  # use -t here for timeout
        . "$env" >| /dev/null ; }
    
    agent_load_env
    
    # agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
    agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
    
    if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
        agent_start
    fi
    
    unset env
  2. Bây giờ chỉnh sửa hoặc tạo ~/.ssh/configtệp và thêm AddKeysToAgenttùy chọn cho từng khổ máy chủ mà bạn muốn bật bộ đệm ẩn (bạn cũng có thể bật tệp trên toàn cầu bằng cách đặt lệnh ở đầu tệp trước tất cả các khai báo máy chủ):

    # GitHub.com
    Host github.com
      Preferredauthentications publickey
      IdentityFile ~/.ssh/id_ed25519_github
      AddKeysToAgent yes
    
    # GitLab.com
    Host gitlab.com
      Preferredauthentications publickey
      IdentityFile ~/.ssh/id_ed25519_gitlab
      AddKeysToAgent yes

    Từ trang man ssh config : Nếu tùy chọn này được đặt thành có và một khóa được tải từ một tệp, khóa và cụm mật khẩu của nó sẽ được thêm vào tác nhân với thời gian tồn tại mặc định, như thể bởi ssh-add (1).

Tuổi thọ tối đa mặc định là mãi mãi hoặc cho đến khi ssh-agentquá trình bị hủy (theo cách thủ công từ trình quản lý tác vụ hoặc khi PC của bạn bị tắt). Nếu bạn muốn sử dụng thời gian chờ hữu hạn, bạn có thể đặt nó với -ttham số của ssh-agent . Thay đổi dòng trong tập lệnh bash từ bước đầu tiên ở trên, ví dụ: trong vòng 30 phút bộ nhớ cache chính:

(umask 077; ssh-agent -t 30m >| "$env")

Xem ở đây để xem vòng loại định dạng thời gian khác.


3

Bạn có thể tạo một .bashrctệp trong thư mục chính của người dùng của bạn như thế nào C:/Users/youruservà đặt ở đó:

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

Kịch bản này thực thi mỗi lần sau khi bash chạy. Vì vậy, bạn sẽ chỉ cần nhập mật khẩu một lần, khi git-bashđược bắt đầu!

Một số phiên bản của bash yêu cầu .bash_profiletệp thay thế .bashrc, vì vậy chỉ trong trường hợp sao chép .bashrc:

copy .bashrc .bash_profile

1

có thể thử thêm -k arg khi bạn làm;

ssh-add -k ~/.ssh/id_rsa
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.