एक अन्य विकल्प यह है कि थोड़ी सी होशियारी करने के लिए एक छोटी सी स्क्रिप्ट लिखी जाए core.sshCommand
- जाँच करें कि क्या वर्तमान वर्किंग डायरेक्टरी में एक विशिष्ट SSH कुंजी कॉन्फ़िगर की गई है और यदि ऐसा है तो उसका उपयोग करें, अन्यथा - मानक SSH कुंजी रिज़ॉल्यूशन पर भरोसा करें।
यहाँ मेरा पहला संस्करण है:
#!/bin/bash
key="$(git config ssh.key)"
if [ -n "$key" ]; then
ssh -o IdentitiesOnly=yes -i "$key" "$@"
else
ssh "$@"
fi
फिर इसे वैश्विक git SSH कमांड के रूप में सेट करें :
chmod 755 ~/.local/bin/git-ssh-command
git config --global core.sshCommand ~/.local/bin/git-ssh-command
( SystemD ऑपरेटिंग सिस्टम पर "यहाँ उपयोगकर्ता स्क्रिप्ट्स के~/.local/bin
लिए वर्तमान मानक है " )
इसे सेट करने के बाद, आप कॉन्फ़िगरेशन विकल्प सेट करके किसी विशिष्ट SSH कुंजी का उपयोग करने के लिए किसी भी रिपॉजिटरी को कॉन्फ़िगर कर सकते हैं ssh.key
:
git config --local ssh.key ~/.ssh/my-non-default-private-key
अतिरिक्त वैकल्पिक ट्रिक्स
ssh.key
"नॉन-डिफॉल्ट SSH कुंजी" या कुछ और करने के लिए वैश्विक डिफ़ॉल्ट सेट करें ।
- जैसे
core.sshCommand
कि रिपॉजिटरी की रूट डायरेक्टरी में git निष्पादित होता है, आपका कस्टम git-ssh-command
उस पर गौर कर सकता है और निर्देशिका नामों के बारे में कुछ अनुमान लगा सकता है। यह else
अनुभाग में किया जा सकता है, इसलिए यदि केवल कोई विशिष्ट कुंजी नहीं है तो उत्तराधिकार में किक लगाई जाती है ssh.key
।
- आप
git remote -v
रीमेक के आधार पर हेयिस्टिक्स को जोड़ने के लिए चेक जोड़ सकते हैं , जैसे कि ईक की स्क्रिप्ट में
- यदि आप रिपॉजिटरी रीमोट्स को देखना चाहते हैं, लेकिन कई रिमूवर हैं जिनकी अलग-अलग कुंजियों की जरूरत है, तो आप
remote="$1:$(sed "s,.* ,,;s,',,g"<<<"$2")"
स्क्रिप्ट की शुरुआत में रिमोट द्वारा संचालित किए जा रहे समाधान को जोड़ सकते हैं - और उसके खिलाफ जांच ( आउटपुट $remote
में मध्य कॉलम की तरह दिखेंगे git remote -v
)।
अपडेट करें:
यहां कस्टम SSH कमांड का एक संस्करण है जो दूरस्थ URL को देखता है और कुछ उत्तराधिकार करता है - मेरे मामले में, मेरे पास एक ही सार्वजनिक गिट होस्टिंग सेवा (काम के लिए एक, व्यक्तिगत के लिए एक) और मैं चुन सकता हूं। दूरस्थ URL (Gitlab समूह या Github संगठन, आदि की जांच) को देखकर सही पहचान:
#!/bin/bash
if [[ "$2" =~ ^git-lfs-authenticate.* ]]; then
remote="$1:$(awk '{print$2}'<<<"$2")"
else
remote="$1:$(sed "s,.* ,,;s,',,g"<<<"$2")"
fi
key="$(git config ssh.key)"
if [ -n "$key" ]; then
ssh -o IdentitiesOnly=yes -i "$key" "$@"
elif [[ "$remote" == git@gitlab.com:my-company* ]]; then
ssh -o IdentitiesOnly=yes -i ~/.ssh/company-id "$@"
elif [[ "$remote" =~ git@bitbucket.org:.*other-org.* ]]; then
ssh -o IdentitiesOnly=yes -i ~/.ssh/custom-org-key "$@"
else
ssh "$@"
fi