wiele aliasów ssh wybiera niewłaściwego użytkownika podczas przesyłania

3

Postępuję zgodnie z procedurą podwójnej tożsamości dla bitbucket :

Mam 2 konta bitbucket ccmcbecki chrisbeck. Pierwsza jest osobista, druga to praca.

Na moim lokalnym komputerze Mac mam to w swoim ~/.ssh/config

Host *.work.com
  User chris
  ForwardAgent yes
  IdentityFile ~/.ssh/work_dsa
Host bitbucket-personal
  HostName bitbucket.org
  User ccmcbeck
  ForwardAgent no
  IdentityFile ~/.ssh/bitbucket_ccmcbeck_rsa
Host bitbucket-work
  HostName bitbucket.org
  User chrisbeck
  ForwardAgent no
  IdentityFile ~/.ssh/bitbucket_chrisbeck_rsa

Na moim lokalnym komputerze Mac ssh -Twszystko jest w porządku, otrzymuję:

$ ssh -T git@bitbucket-personal
logged in as ccmcbeck.
$ ssh -T git@bitbucket-work
logged in as chrisbeck.

Na moim lokalnym komputerze Mac wersja ssh to OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011

Kiedy ssh foo.work.comprzechodzę do mojego Linux-a, otrzymuję:

$ ssh-add -l
1024 ... /Users/chris/.ssh/work_dsa (DSA)
2048 ... /Users/chris/.ssh/bitbucket_ccmcbeck_rsa (RSA)
2048 ... /Users/chris/.ssh/bitbucket_chrisbeck_rsa (RSA)

Na foo.work.com, mam to też w moim~/.ssh/config

Host bitbucket-personal
  HostName bitbucket.org
  User ccmcbeck
  ForwardAgent no
  IdentityFile ~/.ssh/bitbucket_ccmcbeck_rsa
Host bitbucket-work
  HostName bitbucket.org
  User chrisbeck
  ForwardAgent no
  IdentityFile ~/.ssh/bitbucket_chrisbeck_rsa

Jednak w foo.work.commomencie , gdy ja ssh -T, odwołuje się do niewłaściwego użytkownikagit@bitbucket-work

$ ssh -T git@bitbucket-personal
logged in as ccmcbeck.
$ ssh -T git@bitbucket-work
logged in as ccmcbeck.

Włączona foo.work.comjest wersja sshOpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008

Dlaczego moja konfiguracja powoduje foo.work.comodsyłanie do niewłaściwego użytkownika?

Chris Beck
źródło
FWIW, jeśli ssh-add -dmoja bitbucket-personaltożsamość, to foo.work.comużywa poprawnegoUser
Chris Beck
Zachowuje się tak samo na serwerze AWS, który maOpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
Chris Beck
Wygląda na to, że kolejność dodawania kluczy robi różnicę. IOW foo.work.comużywa pierwszego zgłoszonego przez ssh-add -l.
Chris Beck

Odpowiedzi:

3

Najbardziej prawdopodobne wytłumaczenie wydaje mi się, że ssh-agent używa dowolnego klucza, który załadował w dowolnym momencie. Możesz upuścić to zachowanie, używając IdentitiesOnlydyrektywy w pliku konfiguracyjnym w następujący sposób:

 Host bitbucket-personal
 HostName bitbucket.org
 User ccmcbeck
 ForwardAgent no
 IdentityFile ~/.ssh/bitbucket_ccmcbeck_rsa
 IdentitiesOnly yes

 Host bitbucket-work
 HostName bitbucket.org
 User chrisbeck
 ForwardAgent no
 IdentityFile ~/.ssh/bitbucket_chrisbeck_rsa
 IdentitiesOnly yes

Z ssh man page:

Określa, że ​​ssh (1) powinien używać tylko plików tożsamości uwierzytelniania skonfigurowanych w plikach ssh_config, nawet jeśli ssh-agent (1) oferuje więcej tożsamości. Argumentem tego słowa kluczowego musi być „tak” lub „nie”. Ta opcja jest przeznaczona do sytuacji, w których ssh-agent oferuje wiele różnych tożsamości. Domyślnie jest to „nie”.

EDYTOWAĆ:

W twoim poście są te linie, pod sam koniec:

 debug1: SSH2_MSG_SERVICE_ACCEPT received
 debug2: key: /home/chrisb/.ssh/bitbucket_chrisbeck_rsa ((nil))
 debug1: Authentications that can continue: publickey

Wyraźnie pokazują, że ten klucz nie został zaakceptowany. Dlatego zawsze logujesz się jako ccmcbeck: ten klucz działa, a bez IdentitiesOnly yesniego klient próbował innych kluczy, dopóki nie znalazł działającego. Wprowadzając to ograniczenie, przynajmniej wyjaśniliśmy charakter problemu.

Ponieważ z komputera Mac nie masz takiego problemu, musi on znajdować się w kliencie Linux, a zwłaszcza w kluczu prywatnym, którego próbujesz użyć. Najlepszą rzeczą jest wygenerowanie nowego, lokalnego dla Linuksa i umieszczenie jego .pubodpowiednika wśród authorized_keys. Mam nadzieję że to pomoże.

EDYCJA 2:

... lub możesz postępować zgodnie z odpowiedzią SuperUser, aby wybrać klucz prywatny, którego chcesz użyć, określając jego publiczny odpowiednik od przekazanego agenta. Odpowiedź nadal wymaga użycia IdentitiesOnly yesopcji.

MariusMatutiae
źródło
Próbowałem tego i dostaję „odmowę zgody”, gdy mam ssh -Tdo dowolnego aliasu.
Chris Beck,
@ChrisBeck Czy możesz być bardziej szczegółowy? Uruchamiając ssh z flagą -v , proszę.
MariusMatutiae
@ChrisBeck Proszę zobaczyć moją edycję
MariusMatutiae
Dzięki @MariusMatutiae. FWIW, oba ccmcbecki chrisbeckdziałają, jeśli są pierwsze ssh-add -lbez IdentitiesOnly yes. Po IdentitiesOnly yeswłączeniu work.foo.comssh wydaje się szukać tylko kluczy lokalnych, a nie kluczy przekazywanych przez agenta ssh na moim komputerze Mac.
Chris Beck,
byłeś bardzo blisko rozwiązania, które jest tutaj superuser.com/questions/273037/… . Dodatkowo musiałem założyć klucz do pubu work.foo.comi odwołać się do tego w ~/.ssh/config. Jeśli zaktualizujesz swoją odpowiedź, zaakceptuję
Chris Beck,