Інший варіант - написати невеликий скрипт, щоб зробити 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
( ~/.local/bin
це поточний стандарт "розміщувати тут скрипти користувачів" в операційних системах SystemD )
Після цього ви можете налаштувати будь-яке сховище на використання певного ключа SSH, встановивши параметр конфігурації ssh.key
:
git config --local ssh.key ~/.ssh/my-non-default-private-key
Додаткові необов’язкові хитрощі
- Встановіть для глобального
ssh.key
значення "резервний резервний ключ до SSH-ключа, який не є типовим" або щось інше.
- Коли git виконується
core.sshCommand
в кореневому каталозі сховища, ви git-ssh-command
можете переглядати це та мати певну евристику щодо імен каталогів. Це можна зробити в else
розділі, тому евристика вводиться лише в тому випадку, якщо немає конкретного ключа ssh.key
.
- Ви можете додати
git remote -v
галочку, щоб додати евристику на основі пультів дистанційного керування, як у сценарії Ейке
- Якщо ви хочете переглянути пульти сховища, але маєте кілька пультів дистанційного керування, які потребують різних ключів, ви можете додати
remote="$1:$(sed "s,.* ,,;s,',,g"<<<"$2")"
на початку сценарію, щоб вирішити проблему, на якій експлуатується пульт - і перевірити це (це $remote
буде виглядати як середній стовпець на git remote -v
виході).
Оновлення:
Ось версія користувацької команди SSH, яка переглядає віддалену URL-адресу та виконує певні евристики - у моєму випадку у мене є кілька різних ідентифікаційних даних з однією і тією ж публічною службою хостингу git (одна для роботи, одна для особистого тощо), і я можу вибрати правильну ідентифікацію, переглянувши віддалену 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