Как заставить ssh agent forwarding работать с несколькими учетными записями на виртуальной машине?


Существует большое количество ответов на переадресацию агента ssh, но я не смог найти ни одного, который бы решал мою проблему.

Я использую packer.io для автоматизации подготовки моих серверов. Один из конструкторов, который я использую, - это virtualbox-iso builder, позволяющий мне создатьVagrant box для локального тестирования.

Моя хост-машина-это Macbook Pro, который я добавил два ssh-ключа к ssh-агенту с помощью команды типа: ssh-add -K ~/.ssh/id_rsa. Я могу подтвердить, что они оба существуют. с ssh-add -l и ssh-add -L.

Один из ключей - это мой рабочий аккаунт bitbucket, а другой-мой личный аккаунт. Я хотел бы специально нацелить рабочую учетную запись на эту конкретную виртуальную машину. На моем Хосте я создал конфиг под ~/.ssh/config со следующим содержимым:
Host work.bitbucket.org
  User workuser
  ForwardAgent yes
  IdentitiesOnly yes
  IdentityFile ~/.ssh/id_rsa

Host bitbucket.org
  User homeuser
  ForwardAgent yes
  IdentitiesOnly yes
  IdentityFile ~/.ssh/id_rsa_personal

После этого я мог войти на свой хост с помощью рабочего ключа через: ssh -T git@work.bitbucket.org и мой домашний ключ с ssh -T git@bitbucket.org.

Теперь для ВМ...

Следуя инструкциям, которые я нашел из других ответов, я добавил config.ssh.forward_agent = true к моему Файл Vagrantfile.

Я также делаю следующее в одном из моих сценариев подготовки:

echo "updating known_hosts folder"
ssh-keyscan work.bitbucket.org >> ~/.ssh/known_hosts

echo "adding bitbucket key from file"
sudo cat /input/rsa.txt >> ~/.ssh/authorized_keys

Первая команда позволяет мне избежать дальнейших запросов на добавление ключа в мой файл known_hosts. Вторая команда просто добавляет мой рабочий ключ rsa из файла, который был загружен на предыдущем шаге.

Это, кажется, заставляет мой агент forwarding работать на моей виртуальной машине в некоторой степени, однако, он всегда выбирает первую запись в моем ssh-агенте.

Если я попытаюсь либо: ssh -T git@work.bitbucket.org, либо ssh -T git@bitbucket.org, я всегда получите первый ключ, указанный в ssh-add -l. (Я фактически проверил это, добавив и удалив ключи для манипулирования порядком)

Я предположил, что это связано с тем, что я уже нахожусь в сеансе ssh, когда я нахожусь на коробке. Поэтому я посмотрел на этот вопрос, чтобы проверить, как vagrant ssh на самом деле работает. Я попытался манипулировать моими хост-машинами config файл с 127.0.0.1:PORT, где порт был конкретный порт, на котором находится моя машина. Я также попытался добавить дикую карту config на моей виртуальной машине, чтобы разрешить прыжок, но у меня был очевидно, что не настроить что-то правильно, так как он все еще не работает, как ожидалось. На данный момент я могу просто вручную удалить (ssh-add -d pathtokeytoremovehere) дополнительные ключи и добавить их обратно, когда они мне понадобятся, но это, очевидно, не идеально.

Есть идеи?

1 2

1 ответ:

Вы пересылаете ssh-agent, но не локальную конфигурацию, которая отвечает за выбор правильного ключа для вас. Чтобы он работал, Вам также придется скопировать конфигурацию на сервер.

Но не копируйте туда закрытые ключи. Ссылки на открытые ключи должны выполнять эту работу, так как они позволят ssh попробовать этот ключ и выбрать правильный из ssh-agent.