несколько псевдонимов SSH, выбирающих неправильного пользователя при пересылке

3

Я следую двойной процедуре идентификации для bitbucket :

У меня есть 2 аккаунта bitbucket ccmcbeckи chrisbeck. Первое личное, второе - работа.

На моем локальном Mac у меня есть это в моем ~/.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

На моем локальном Mac у меня ssh -Tвсе хорошо, я получаю:

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

На моем локальном Mac версия ssh OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011

Когда я захожу ssh foo.work.comв свою коробку Linux, я получаю

$ 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)

У foo.work.comменя также есть это в моем~/.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

Тем не менее, foo.work.comкогда я ssh -T, он ссылается на неправильного пользователя дляgit@bitbucket-work

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

На foo.work.com, версия sshOpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008

Почему моя конфигурация вызывает foo.work.comссылку на неправильного пользователя?

Крис Бек
источник
FWIW, если я ssh-add -dмоя bitbucket-personalличность, то foo.work.comиспользует правильныйUser
Крис Бек
Он также ведет себя так же на сервере AWS, который имеетOpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
Крис Бек
Похоже, порядок добавления ключей имеет значение. IOW, foo.work.comиспользует первый, о котором сообщили ssh-add -l.
Крис Бек

Ответы:

3

Мне представляется наиболее вероятным объяснение того, что ssh-agent использует любой загруженный ключ в любое время. Вы можете отбросить это поведение, используя IdentitiesOnlyдирективу в вашем конфигурационном файле следующим образом:

 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

Из ssh man page:

Указывает, что ssh (1) должен использовать только файлы идентификации аутентификации, настроенные в файлах ssh_config, даже если ssh-agent (1) предлагает больше идентификаторов. Аргумент к этому ключевому слову должен быть «да» или «нет». Эта опция предназначена для ситуаций, когда ssh-agent предлагает много разных идентификаторов. По умолчанию это «нет».

РЕДАКТИРОВАТЬ:

В вашем посте есть следующие строки:

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

Они ясно показывают, что этот ключ не был принят. Вот почему вы всегда входите в систему как ccmcbeck: этот ключ работает, и без IdentitiesOnly yesнего клиент пробовал другие ключи, пока не нашел рабочий. Введя это ограничение, мы, по крайней мере, прояснили природу проблемы.

Поскольку с вашего Mac у вас, похоже, нет такой проблемы, он должен находиться в клиенте Linux и, в частности, в секретном ключе, который вы пытаетесь использовать. Лучше всего создать новый, локальный для Linux, и поместить его .pubаналог в authorized_keys. Надеюсь это поможет.

EDIT2:

... или вы можете следовать этому ответу SuperUser, чтобы выбрать закрытый ключ, который вы хотите использовать, указав его открытый аналог от перенаправленного агента. Ответ по-прежнему требует использования IdentitiesOnly yesопции.

MariusMatutiae
источник
Я попробовал это, и я получил «разрешение отказано», когда я ssh -Tлибо псевдоним.
Крис Бек
@ChrisBeck Не могли бы вы быть более конкретным? Запустив ssh с флагом -v , пожалуйста.
MariusMatutiae
@ChrisBeck Пожалуйста, смотрите мои изменения
MariusMatutiae
Спасибо @MariusMatutiae. FWIW, оба ccmcbeckи chrisbeckработают, если они являются первыми ssh-add -lбез IdentitiesOnly yes. С IdentitiesOnly yesON work.foo.com, SSH появляется только искать местные ключи, а не ключи , передаваемые через SSH агент на моем Mac.
Крис Бек
вы были очень близки к решению , которое находится здесь superuser.com/questions/273037/... . Кроме того, мне нужно было поставить ключ pub work.foo.comи сослаться на него в ~/.ssh/config. Если вы обновите свой ответ, я приму
Крис Бек