Một khả năng để sử dụng ~/.ssh/configlà sử dụng Matchhạn chế thay vì Hosthạn chế. Cụ thể Match Execgọ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-adminkhớ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ó $SHELLbiế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/yourOwnPrivateKeycó chứa khóa riêng của bạn và khóa đó ~/.ssh/gitolite-adminchứa khóa riêng của người dùng gitolite-admin. Tôi đã bao gồm IdentitiesOnly yeskhai 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_repophí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.comvà hầu hết trong số chúng sử dụng thì ~/.ssh/yourOwnPrivateKeysẽ 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/configsẽ 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.comhạn chế sẽ xuất hiện sau Match Execmột hoặc một.