Подтвердить что ты не робот

Github deploy keys: как мне разрешить несколько репозиториев для одной машины?

Итак, у меня есть хост, назовите его rob. Я использовал ssh-keygen на rob, чтобы получить открытый ключ, который я дал github в добавить новый экран ключа развертывания для репозитория cheech. Теперь я хочу развернуть chong на rob. Но если я перейду к добавлению нового экрана ключа развертывания для репозитория chong в github и вставьте открытый ключ, который я сгенерировал на rob, он говорит key already in use. Я думал, что если бы они были в использовании, я мог бы клонировать chong на rob, но это говорит, что разрешение отклонено.

Так ясно, что это сложнее, чем я думал, и это связано с наличием нескольких ключей или чего-то еще. Что делать, чтобы клонировать chong на rob?

Благодарим вас за помощь.

4b9b3361

Ответ 1

Как только ключ был прикреплен к одному репо в качестве ключа развертывания, он не может быть используется на другом репо. Если вы используете эту ошибку при настройке а затем вам нужно будет изменить свой пульт и настроить ~/.ssh/config для использования несуществующего имени хоста github.com, который ssh сможет использовать для выбора правильного ключа развертывания ssh для вашего хранилище.

# first we remove the origin
$ git remote -v
origin  [email protected]:username/foo.git (fetch)
origin  [email protected]:username/foo.git (push)
$ git remote rm origin

# here we add a new origin using a host nickname called
# foo.github.com that we will reference with a Host stanza in our
# ~/.ssh/config to specify which key to use with which fake hostname.
$ git remote add origin [email protected]:username/foo.git
$ git remote -v
origin  [email protected]:username/foo.git (fetch)
origin  [email protected]:username/foo.git (push)

Создайте ключ развертывания для своего репозитория и назовите его разумно, как:

$ ssh-keygen -t rsa -f ~/.ssh/id_rsa-foo -C https://github.com/username/foo
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/username/.ssh/id_rsa-foo.
Your public key has been saved in /home/username/.ssh/id_rsa-foo.pub.
The key fingerprint is:
c0:ff:ee:34:24:11:5e:6d:7c:4c:b1:a0:de:ad:be:ef https://github.com/username/foo
The key randomart image is:
+--[ RSA 2048]----+
|  E   o..o.oo.   |
| M o o o .+CoW   |
|  + o = o. ..    |
| .   . +         |
|        S        |
|       o .       |
|        +        |
|       . o       |
|        ..o.     |
+-----------------+

Как только вы добавлен ключ развертывания вам нужно будет добавить следующую строфу в ваш файл ~/.ssh/config:

Host fake-hostname-foo.github.com
    Hostname github.com
    IdentityFile ~/.ssh/id_rsa-foo

Теперь вы можете протестировать его с помощью:

$ ssh -T [email protected]
Hi username! You've successfully authenticated, but GitHub
does not provide shell access.

Ответ 2

Самое простое найденное решение было описано здесь.

1) Введите эту команду (вы сделаете это для любого количества ключей, которые вам нужны):

ssh-keygen -t rsa -C "[email protected]"

2) При появлении запроса с указанным ниже типом введите уникальное имя (например, foo1_rsa). Файл будет создан в вашем текущем каталоге, и вам может потребоваться переместить его в .ssh, если вы хотите быть аккуратным:

Введите файл для сохранения ключа (/Users/you/.ssh/id_rsa): [Нажмите enter]

3) Обновите конфигурационный файл SSH:

vi ~/.ssh/config

Может быть пустым:

Host cheech github.com
Hostname github.com
IdentityFile ~/.ssh/foo1_rsa

Host chong github.com
Hostname github.com
IdentityFile ~/.ssh/foo2_rsa

Ответ 3

Развертывание ключа для github уникально... Вы должны сгенерировать новый ключ для другого репозитория. Просто запустите ssh-keygen снова

Смотрите документацию github для этого: https://help.github.com/articles/managing-deploy-keys

Ответ 4

Если вам удобно предоставлять rob доступ ко всем частным репозиториям в вашей учетной записи GitHub, вы можете удалить ключ в качестве ключа развертывания из cheech, а затем добавить его как SSH-ключ в свою учетную запись GitHub, как целое. Это дало бы rob доступ как к cheech, так и к chong.

Это не будет работать, если у вас есть другие репозитории в вашей учетной записи, которые вы не хотите получать rob.

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

Ответ 5

Управление несколькими ключами развертывания GitHub можно упростить с помощью моего крошечного модуля npm github-add-key. Он использует подход, описанный в этом отличный ответ, и все, что вам нужно, это

$github-add-key rob/chong

в локальном клонировании rob/chong и следуйте простому автоматическому процессу.

Ответ 6

Я знаю, что это 5+ лет, но там нет принятого ответа на этот популярный вопрос, поэтому вот то, что я считаю лучшим способом, рассматривающим чистоту и будущую читаемость:


ДОБАВИТЬ ПОЛЬЗОВАТЕЛЬ DEPLOY ДЛЯ ВАШЕЙ КОМАНДЫ

Шаг 1: Создайте новый адрес электронной почты в домене организации для нового пользователя развертывания. Что-то вроде [email protected]

Шаг 2: Используйте этот почтовый ящик для создания новой учетной записи GitHub (GitHub вызывает этих "пользователей компьютеров" ) дайте ему имя пользователя, например deploy-ExampleOrganisation, чтобы он был понятным.

Шаг 3. Создайте пользователя на своем сервере под названием "deploy" с помощью следующей команды:

useradd -d /home/deploy -m deploy

Создайте ключ SSH для развертывания @имя_сервера, не указывая никакую кодовую фразу и /home/deploy/.ssh/id_rsa в качестве местоположения файла:

ssh-keygen -t rsa -b 4096 -C "[email protected]"

Добавьте содержимое /home/deploy/.ssh/id_rsa.pub в качестве ключа SSH в вашей новой учетной записи deploy-ExampleOrganisation GitHub: выберите "Настройки" > "SSH" и "GPG" > "Новый SSH-ключ".

Шаг 4: Создайте команду в вашей организации, которая называется "Только для чтения", добавьте нового пользователя в команду и дайте команде прочитать доступ к любым репозициям, которые будут развернуты, (Если у вас нет учетной записи организации, вы все равно можете предоставить этому пользователю доступ к нескольким частным репозиториям)

Шаг 5: Добавьте свой собственный SSH-ключ для развертывания файла авторизированных ключей пользователя (/home/deploy/.ssh/authorized_keys), чтобы вы (или ваше развертывание script) могли войти в систему как развертывание при развертывании кода.

Boom! Что это... Теперь у вас есть чистый и самодокументированный поток.


P.S. Я пробовал ответить aculich на высокий голос, но он чувствовал себя грязным, возиться с фальшивыми именами хозяев, и я подумал: если я вернусь к этому через много лет, я собираюсь легко понять, что я сделал, чтобы создать все ключи и понять, как что SSH файл конфигурации делает эти смешные несуществующие удаленные адреса? Наверное, нет!

Преимущества метода развертывания пользователя по методу ложных имен узлов:

  • Никаких хаков! Это стандартные учетные записи пользователей с четкими именами, доступ к репозиториям через имена реальных хостов.
  • Меньше клавиш, плавающих вокруг.
  • Если/когда вы переходите на дополнительные серверы, легко предоставить пользователю Deploy учетную запись на всех из них и просто добавив 1 новый ключ к своей учетной записи GitHub, ее учетная запись на новом сервере готова к развертыванию кода.
  • Развернуть пользователя только с низким уровнем привилегий Доступ только для чтения только к репозиториям, указанным в команде, и ваши личные ключи SSH хранятся на сервере, поэтому, если какой-то неприятный человек действительно получает доступ к вашему серверу, они не могут навязать хау все ваши репозиции.
  • Развертывание файлов конфигурации инструмента (например, Capistrano) не затуманивается, содержа их ошибочные имена поддельных хостов. (Это было, когда они начали распространяться за пределы сервера, что мне действительно стало неудобно с этим методом.)
  • Если вы забыли, как, черт возьми, вы это сделали через несколько лет, владение файлом приведет вас к пользователю развертывания ls -la, ключ SSH приведет вас к имени учетной записи GitHub ssh -T [email protected] и, надеюсь, тогда вы полностью до скорости снова.
  • И, наконец, это метод, рекомендованный GitHub.

Ответ 7

Вы также можете создать обертку ssh и передать ее как GIT_SSH. Преимущество этой опции состоит в том, что вам не нужно менять пульт git. fooobar.com/questions/94420/...

Ответ 8

Хотя идея Pimkin была великолепна, я не хотел устанавливать node только для этого, поэтому я создал нечто подобное в bash:

https://gist.github.com/blvz/8eeebacae11011c25fc79eff12f49ae9

Установка и использование:

curl https://gist.githubusercontent.com/blvz/8eeebacae11011c25fc79eff12f49ae9/raw/6f2f7f3709a0fe852d8a3a5bb125325e3ffbc7d8/gh-deploy-clone.sh > /usr/local/bin/gh-deploy-clone
chmod +x /usr/local/bin/gh-deploy-clone

gh-deploy-clone user/repo

# You can also give it a name, in case
# you have multiple deploy targets:

gh-deploy-clone user/repo staging