Mam konto osobiste i konto firmowe w Unfuddle. Na Unfuddle SSH klucze mogą być używane tylko na jednym koncie, więc muszę utworzyć osobny klucz SSH na moim laptopie dla obu kont. Pobiegłem ssh-keygen -t rsa
wygenerować dwa klucze o różnych nazwach (nazwa osobista to nazwa domyślna, a firma to {firma} _rsa). Problem polega na tym, że wygląda na to, że mój domyślny klucz jest używany wszędzie i nie mogę się dowiedzieć, jak określić klucz, który ma być używany w Git dla poszczególnych repozytoriów.
Więc moje pytanie brzmi: jak określić klucz SSH, który będzie używany na zasadzie repo-to-repo?
Instaluję mój ssh_config (~ / .ssh / config), ale nadal nie działa.
config:
Host {personalaccount}.unfuddle.com
HostName {personalaccount}.unfuddle.com
User git
IdentityFile /Users/dave/.ssh/id_rsa
Host {companyaccount}.unfuddle.com
HostName {companyaccount}.unfuddle.com
User git
IdentityFile /Users/dave/.ssh/cage_rsa
Mój plik konfiguracyjny repozytorium Git dla repo na moim koncie firmowym rozwija się następująco:
[remote "origin"]
url = git@{companyaccount}.unfuddle.com:{companyaccount}/overall.git
fetch = +refs/heads/*:refs/remotes/origin/*
Więc nie jestem pewien, czy coś jest nie tak z moją konfiguracją ssh lub moją konfiguracją git.
Odpowiedzi:
Jeśli masz aktywnego agenta ssh z
id_rsa
załadowanym kluczem, prawdopodobnie problem polega na tym, że ssh oferuje ten klucz jako pierwszy. Unfuddle prawdopodobnie przyjmuje je do uwierzytelnienia (np. W sshd ), ale odrzuca je w celu autoryzacji dostępu do repozytoriów firmowych (np. W jakimkolwiek oprogramowaniu wewnętrznym, którego używają do autoryzacji, być może coś podobnego do Gitolite). Być może istnieje sposób, aby dodać swój klucz osobisty do konta firmowego (wiele osób nie udostępnia tych samychcorp_rsa
plików kluczy publicznych i prywatnych, prawda?).IdentitiesOnly
.ssh/config
Hasło konfiguracji może być stosowany w celu ograniczenia klucze SSH oferty do zdalnego sshd tylko określone poprzezIdentityFile
słów kluczowych (czyli odmówi używać żadnych dodatkowych przycisków, które zdarzają się być załadowany do działającego ssh-agent ).Wypróbuj te
.ssh/config
sekcje:Następnie użyj takich adresów URL Git:
Jeśli chcesz w pełni skorzystać z
.ssh/config
mechanizmu, możesz podać własną niestandardową nazwę hosta i zmienić domyślną nazwę użytkownika:Następnie użyj takich adresów URL Git:
źródło
ssh-add -l
przed użyciem aliasu hosta Git. Musi również być obecny plik klucza publicznego, aby ssh mógł rozpoznać klucz, który ssh-agent przechowuje. Możesz odtworzyć utracony.pub
plik za pomocą polecenia takiego jakssh-keygen -f blah -y > blah.pub
.man ssh_config
Coś jak
I użyj
personal_repo
jako hosta w swoim repozytorium git.źródło
Host
to tylko identyfikator - nie potrzeba pełnej nazwy domeny. To prawdopodobnie tworzy ukryte błędy. Jeśli to zmienisz, nie musisz przeliterować pełnej nazwy w konfiguracji git.IdentityFile i IdentitiesOnly działa dobrze. Niepokoi mnie to, że muszę używać różnych nazw hostów, aby się połączyć, oraz fakt, że przekazane połączenie agenta nadal zawiera wszystkie klucze, co oznacza, że jeśli zdalny host zostanie przejęty, mogą korzystać z dowolnej mojej tożsamości, gdy jestem w .
Ostatnio zacząłem używać:
https://github.com/ccontavalli/ssh-ident
jest to opakowanie wokół ssh, to:
źródło
Oto właściwy sposób, jeśli chcesz użyć agenta ssh:
Objaśnienie: jeśli masz klucz prywatny w katalogu ~ / .ssh, ssh-agent nie będzie używany. Tak więc tworzymy klucz publiczny pod inną nazwą, aby ssh był zmuszony użyć ssh-agent. Pomaga to również, jeśli nie masz dostępu do kluczy prywatnych (np. Przekazywanie agentów ssh)
źródło
ssh-add -L
, niessh-agent
.