5

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

У меня есть простой скрипт bash:

#!/bin/bash
cd /vagrant
if [ ! -d "repo" ]; then
  git clone git@remoterepo.com:/my/repo.git
end

Я получаю ошибку:

Проверка ключа хоста не удалась.

фатальный: удаленный конец неожиданно завис

Что имеет смысл, поскольку в /home/vagrant/.ssh нет ключей

Я довольно много гуглил безрезультатно, я попытался установить config.ssh.forward_agent = true который позволяет мне вручную клонировать репо, когда я ssh'ed в машину, но не когда он пытается беги сам. Я также пытался указать config.ssh.private_ssh_key = "~/.ssh/id_rsa" но тогда vagrant просто не завершит загрузку (я предполагаю, что приложение не может выполнить ssh в поле).

Итак, мой вопрос ... Нужно ли перестраивать базовый блок для включения набора ключей и авторизации этих ключей в моем удаленном репо? Или есть более простое решение, которое я пропускаю?

примечание: я рассмотрел основы SSH на виртуальных машинах Vagrant, которые кажутся похожими, но я думаю, что это больше о настройке другого пользователя на коробке, а опубликованное решение гораздо более ручное, чем хотелось бы.

2 ответа2

4

Временным решением для меня было сгенерировать набор ключей и поместить их в тот же каталог, что и Vagrantfile , а затем при подготовке я копирую ключи в /root/.ssh/ . В этом была одна небольшая проблема: мне также пришлось сгенерировать файл known_hosts чтобы виртуальная машина могла принять соединение с удаленного сервера. Файл known_hosts также находится в /vagrant/.ssh/ dir и копируется с ключами, и все теперь работает.

В конце концов, когда я не пытаюсь загрузить ящик размером 1 ГБ на мой файловый хост по пятнистому Wi-Fi, реальным решением будет постоянное включение этих файлов в базовый ящик.

1

Есть кое-что об этом здесь: https://serverfault.com/questions/107187/ssh-agent-forwarding-and-sudo-to-another-user - сводка заключается в том, что пересылка SSH работает через переменную среды, которая не сохраняется su . Предлагаются решения на разных уровнях Unix-fu; Я пошел с дешевой и веселой:

su -c "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK; CMD" -l vagrant

где CMD - команда, которую вы хотите запустить.

Это позволяет мне запускать git clone как vagrant во время инициализации, так что я могу клонировать репозитории GitHub/Bitbucket, используя открытый ключ SSH из моей хост-системы OS X, не имея всего, что в конечном итоге принадлежит root . И единственный другой необходимый шаг - предварительно заполнить ~/.ssh/known_hosts любыми необходимыми ключами (что, я думаю, вы уже делаете).

(В отличие от ситуации в реальной системе (см. Комментарии к ответу, предлагающие это - https://serverfault.com/a/371788/321408), нет необходимости изменять разрешения сокета, поскольку он уже принадлежит vagrant - то, что механизм vagrant ssh для вас, я полагаю. Поэтому я не верю, что с этим связаны какие-либо проблемы безопасности.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .