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-agent
quy 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-agent
như 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 .bashrc
cấ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
Đầu tiên, chúng tôi muốn tự động khởi chạy ssh-agent
khi 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-add
khóa ngay lập tức. Tập lệnh này đi đến ~/.bashrc
hoặc ~/.profile
hoặ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
Bây giờ chỉnh sửa hoặc tạo ~/.ssh/config
tệp và thêm AddKeysToAgent
tù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-agent
quá 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 -t
tham 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.