Określ klucz SSH dla git push dla danej domeny
Mam następujący przypadek użycia: chciałbym móc wcisnąć do {[0] } używając klucza prywatnego użytkownika gitolite-admin
, podczas gdy chcę wcisnąć do [email protected]:some_repo
używając 'własnego' klucza prywatnego. AFAIK, nie mogę tego rozwiązać używając ~/.ssh/config
, ponieważ nazwa użytkownika i nazwa serwera są identyczne w obu przypadkach. Ponieważ najczęściej używam własnego klucza prywatnego, zdefiniowałem go w ~/.ssh/config
dla [email protected]
. Czy ktoś zna sposób na nadpisanie klucza używanego do pojedynczego wywołania git
?
(na bok: gitolite odróżnia kto jest wykonywanie pchania w oparciu o klucz, więc nie jest problemem, jeśli chodzi o dostęp, własność i audyt, że ciąg user @ server jest identyczny dla różnych użytkowników.)
8 answers
Nawet jeśli użytkownik I host są tymi samymi, nadal można je rozróżnić w ~/.ssh/config
. Na przykład, jeśli Twoja konfiguracja wygląda tak:
Host gitolite-as-alice
HostName git.company.com
User git
IdentityFile /home/whoever/.ssh/id_rsa.alice
IdentitiesOnly yes
Host gitolite-as-bob
HostName git.company.com
User git
IdentityFile /home/whoever/.ssh/id_dsa.bob
IdentitiesOnly yes
Następnie wystarczy użyć gitolite-as-alice
i gitolite-as-bob
zamiast nazwy hosta w adresie URL:
git remote add alice git@gitolite-as-alice:whatever.git
git remote add bob git@gitolite-as-bob:whatever.git
Uwaga
Chcesz dołączyć opcję IdentitiesOnly yes
, aby zapobiec używaniu domyślnych identyfikatorów. W przeciwnym razie, jeśli masz również pliki id pasujące do domyślnych nazw, zostaną one wypróbowane jako pierwsze, ponieważ w przeciwieństwie do innych opcji konfiguracyjnych (które są zgodne z "first in wins") opcja IdentityFile
dołącza do listy tożsamości do wypróbowania. Zobacz: https://serverfault.com/questions/450796/how-could-i-stop-ssh-offering-a-wrong-key/450807#450807
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-13 12:13:35
Alternatywnym podejściem do zaproponowanym powyżej przez Marka Longairajest użycie aliasu, który uruchomi dowolnepolecenie git, na dowolnym zdalnym, z alternatywnym kluczem ssh. Chodzi o zmianę tożsamości SSH podczas uruchamiania komend git.
Zalety w stosunku do podejścia do aliasów hosta w drugiej odpowiedzi:
- będzie działać z dowolnymi poleceniami lub aliasami git, nawet jeśli nie możesz podać
remote
wyraźnie. - łatwiejsze w pracy z wieloma repozytoriami, ponieważ trzeba je skonfigurować tylko raz na maszynę kliencką, a nie raz na repozytorium na każdej maszynie klienckiej.
Używam kilku małych skryptów i aliasu git admin
. W ten sposób mogę zrobić, na przykład:
git admin push
Aby przejść do domyślnego pilota używając alternatywnego ("admin") klucza SSH. Ponownie możesz użyć dowolnego polecenia (nie tylko push
) z tym aliasem. Możesz nawet zrobić git admin clone ...
, aby sklonować repozytorium, które masz tylko dostęp do klucza "admin".
Krok 1: Utwórz alternatywne klucze SSH, opcjonalnie Ustaw hasło, jeśli robisz to na cudzej maszynie.
Krok 2: Utwórz skrypt o nazwie "ssh-as.sh" uruchamia rzeczy, które używają SSH, ale używają podanego klucza SSH, a nie domyślnego:
#!/bin/bash
exec ssh ${SSH_KEYFILE+-i "$SSH_KEYFILE"} "$@"
Krok 3: Utwórz skrypt o nazwie "git-as.sh", który uruchamia polecenia git używając podanego klucza SSH.
#!/bin/bash
SSH_KEYFILE=$1 GIT_SSH=${BASH_SOURCE%/*}/ssh-as.sh exec git "${@:2}"
Krok 4: Dodaj alias (używając czegoś odpowiedniego dla" PATH_TO_SCRIPTS_DIR " poniżej):
# Run git commands as the SSH identity provided by the keyfile ~/.ssh/admin
git config --global alias.admin \!"PATH_TO_SCRIPTS_DIR/git-as.sh ~/.ssh/admin"
Więcej szczegółów na stronie: http://noamlewis.wordpress.com/2013/01/24/git-admin-an-alias-for-running-git-commands-as-a-privileged-ssh-identity/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:24
Możesz użyć zmiennej środowiskowej git GIT_SSH_COMMAND
. Uruchom to w terminalu pod repozytorium git:
GIT_SSH_COMMAND='ssh -i ~/.ssh/your_private_key' git submodule update --init
Zastąp ~/.ssh/your_private_key
ścieżką klucza prywatnego ssh, której chcesz użyć. I możesz zmienić kolejne polecenie git (w przykładzie jest git submodule update --init
) na inne takie jak git pull
, git fetch
, itd.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-16 03:31:40
Inną alternatywą jest użycie ssh-ident, do zarządzania tożsamościami ssh .
Automatycznie ładuje i używa różnych kluczy na podstawie bieżącego katalogu roboczego, opcji ssh i tak dalej... co oznacza, że możesz łatwo mieć katalog work / I katalog private/, który przejrzyście kończy się przy użyciu różnych kluczy i tożsamości z ssh.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-02 02:06:11
Jeden z systemów opartych na Uniksie (Linux, BSD, Mac OS X), domyślna tożsamość jest przechowywana w katalogu $HOME/.ssh , W 2 plikach:
private key: $HOME/.ssh/id_rsa
public key: $HOME/.ssh/id_rsa.pub
Gdy używasz ssh
bez opcji -i
, używa ona domyślnego klucza prywatnego do uwierzytelniania za pomocą zdalnego systemu.
Jeśli masz inny klucz prywatny, którego chcesz użyć, na przykład $Strona główna/.SSH / deploy_key, musisz użyć ssh -i ~/.ssh/deploy_key ...
ssh-add ~/.ssh/deploy_key
ssh-add ~/.ssh/id_rsa
Więc za każdym razem, gdy używasz ssh
lub git
lub scp
(w zasadzie ssh
też), nie musisz już używać opcji -i
.
Możesz dodać dowolną liczbę kluczy do pliku $Strona główna/.bash_profile.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-05 03:16:18
Używam Git Basha na Win7. To mi się udało.
Utwórz plik konfiguracyjny w~/.ssh / config lub c:/users/[your_user_name]/.ssh / config. W pliku wpisz:
Host your_host.com
IdentityFile [absolute_path_to_your_.ssh]\id_rsa
Myślę, że host musi być adresem URL, a nie tylko "nazwa" lub ref dla Twojego hosta. Na przykład,
Host github.com
IdentityFile c:/users/[user_name]/.ssh/id_rsa
Ścieżka może być również zapisana w /C / users/[user_name]/.... format
Rozwiązanie dostarczone przez Giordano Scalzo jest również świetne. https://stackoverflow.com/a/9149518/1738546
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:38
Jeśli używasz SSH w wersji Gita na windows, linia pliku tożsamości w konfiguracji ssh wygląda tak:
IdentityFile /c/Users/Whoever/.ssh/id_rsa.alice
Gdzie /c
jest dla c:
Aby sprawdzić, w GIT ' s bash do
cd ~/.ssh
pwd
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-20 10:14:22
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-28 08:37:59