Một khả năng để sử dụng ~/.ssh/config
là sử dụng Match
hạn chế thay vì Host
hạn chế. Cụ thể Match Exec
gọi một lệnh shell để quyết định có áp dụng khai báo hay không. Trong bash bạn có thể sử dụng lệnh sau:
[ git@git.company.com:gitolite-admin = $(git config --get remote.origin.url)'' ]
Điều này sử dụng [
lệnh bash để xác minh nếu hai chuỗi bằng nhau. Trong trường hợp này, nó đang kiểm tra nếu chuỗi git@git.company.com:gitolite-admin
khớp với đầu ra thu được từ $(git config --get remote.origin.url)''
lệnh.
Bạn có thể sử dụng bất kỳ lệnh nào khác xác định kho lưu trữ mà shell đang bật. Để làm việc này, điều quan trọng là phải có $SHELL
biến được xác định cho shell của bạn, trong trường hợp của tôi /bin/bash
. Ví dụ đầy đủ sau đó sẽ là như sau ~/.ssh/config
:
Match Exec "[ git@git.company.com:gitolite-admin = $(git config --get remote.origin.url)'' ]"
IdentityFile ~/.ssh/gitolite-admin
IdentitiesOnly yes
ForwardAgent no
ForwardX11 no
ForwardX11Trusted no
Match Exec "[ git@git.company.com:some_repo = $(git config --get remote.origin.url)'' ]"
IdentityFile ~/.ssh/yourOwnPrivateKey
IdentitiesOnly yes
ForwardAgent no
ForwardX11 no
ForwardX11Trusted no
Trong ví dụ này tôi giả sử ~/.ssh/yourOwnPrivateKey
có chứa khóa riêng của bạn và khóa đó ~/.ssh/gitolite-admin
chứa khóa riêng của người dùng gitolite-admin
. Tôi đã bao gồm IdentitiesOnly yes
khai báo để đảm bảo rằng chỉ có một khóa được cung cấp cho máy chủ git, được đề cập bởi Mark Longair . Các khai báo khác chỉ là các tùy chọn ssh tiêu chuẩn cho git.
Bạn có thể thêm cấu hình này nếu bạn có một vài some_repo
phím mà bạn muốn sử dụng với các phím khác nhau. Nếu bạn có một số kho lưu trữ tại git@git.company.com
và hầu hết trong số chúng sử dụng thì ~/.ssh/yourOwnPrivateKey
sẽ có ý nghĩa hơn khi đưa khóa này làm mặc định cho máy chủ lưu trữ. Trong trường hợp này, ~/.ssh/config
sẽ là:
Match Exec "[ git@git.company.com:gitolite-admin = $(git config --get remote.origin.url)'' ]"
IdentityFile ~/.ssh/gitolite-admin
IdentitiesOnly yes
Host git.company.com
IdentityFile ~/.ssh/yourOwnPrivateKey
IdentitiesOnly yes
ForwardAgent no
ForwardX11 no
ForwardX11Trusted no
Lưu ý rằng thứ tự quan trọng và Host git.company.com
hạn chế sẽ xuất hiện sau Match Exec
một hoặc một.