titusjaka
@titusjaka
DevOps engineer

Как сообщить git, какой ssh-ключ использовать при авторизации?

Добрый день!
Есть следующая задача. На некотором веб-сервисе есть библиотека скриптов, которые хочется версионировать.
Решение видится такое:
  • Создаем пустую папку
  • Клонируем в нее репозиторий с сервера
  • Скачиваем библиотеку скриптов через API
  • Проверяем, есть ли изменения в файлах
  • Если изменения есть, то отправляем на сервер


Все хорошо, кроме взаимодействия с git-сервером. Хочется, чтобы скрипт авторизовывался через ssh-ключ. Поиски в интернете не дали другого решения, кроме как записать ключ в ~/.ssh. К сожалению, такое решение не подходит, поскольку скрипт будет выполняться на агентах TeamCity и хотелось бы иметь возможность просто подложить ему ключик.
Вопрос возник, потому что:
  • В ssh можно указать, какой ключ использовать. ssh -i $path_to_key
  • В SourceTree можно указать сторонний ключ для git
  • В teamcity есть своя библиотека ключей, которыми она авторизуется
  • Тем не менее, ключ у git для подмены ssh-ключа я не нашел


Возможно, эту задачу можно решить не через стандартную утилиту, но через сторонние библиотеки для языков программирования? Подойдет любой вариант.
Заранее спасибо за помощь!

UPD1: редактирование файла ~/.ssh/config подошло бы, если бы не:
  1. Речь идет об агентах teamcity. В таком случае, получается, что на всех агентах, где запускается скрипт, должен быть исправлен конфиг, либо я должен ограничить список агентов, на которых запускается скрипт. Такое решение не сильно отличается от подкладывания файла ~/.ssh/id_rsa
  2. Скрипт, скорее всего, будет запускаться на Windows-машинах. Это означает, что централизовано подложить ~/.ssh/config будет проблематично.
  • Вопрос задан
  • 2923 просмотра
Решения вопроса 1
titusjaka
@titusjaka Автор вопроса
DevOps engineer
Неожиданно решение нашлось в коде Ansible
Делается это так:
  1. создаем файл ssh_git.sh с содержимым:
    #!/bin/sh
    if [ -z "$GIT_SSH_OPTS" ]; then
        BASEOPTS=""
    else</li>
        BASEOPTS=$GIT_SSH_OPTS
    fi
    
    if [ -z "$GIT_KEY" ]; then
        ssh $BASEOPTS "$@"
    else
        ssh -i "$GIT_KEY" $BASEOPTS "$@"
    fi</li>

  2. Создаем переменную $GIT_SSH
    export GIT_SSH=~/ssh_git.sh
  3. В переменную $GIT_KEY пишем путь до ключа
    export GIT_KEY=$sshKey
  4. Дальше все как обычно, просто делаем git clone
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
iDoka
@iDoka
HW Design Engineer, iDoka.ru
$ cat ~/.ssh/config
Host         my_github
Hostname     github.com
IdentityFile ~/.ssh/github.rsa


для захода по ssh синтаксис примерно такой:
ssh my_github

думаю для гит указания хоста излишни
Ответ написан
chupasaurus
@chupasaurus
Сею рефлекторное, злое, временное
Создайте файл ~/.ssh/config. В нём на каждого юзера:
Host git-as-user1
  HostName git.company.com
  User git
  IdentityFile /home/user1/.ssh/id_rsa.user1
  IdentitiesOnly yes

После чего git remote add user1 git@git-as-user1:repo.git
Ответ написан
@spotifi
Если вам по чтению только - использовать Deploy Key. Можно один общий.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы