LINUX.ORG.RU
ФорумAdmin

Подскажите как воспользоваться ключами в git


0

1

Подскажите как воспользоваться ключами в git. Есть репозиторий git на сервере, инициированный командой:

  • git init --bare --share

Но при попытке пропушить на сервер с локального компа при созданном origin командой:

  • git remote add origin ssh://username@example.com/var/git/example.git .....
  • git push origin master

Не пущает. Пишет:

Permission denied (publickey). fatal: The remote end hung up unexpectedly

Публичный ключ положил в ~/.ssh/authorized_keys на сервере. Я так понимаю при подключении по ssh git'ом, необходимо использовать секретный ключ на стороне клиента. Где его прописывать?

На стороне клиента ключи обычно лежат в ~/.ssh/id_rsa{,.pub}. Другое место можно указать в .ssh/config вида:

Host example.com
        IdentityFile ~/.ssh/my_git_id_rsa
AITap ★★★★★ ()
Ответ на: комментарий от AITap

А если там много ключей, то как программа git поймет какой использовать?

И еще вопрос, а можно ли использовать в конструкции вида: git remote add origin ssh://username@example.com/var/git/example.git ip адрес, вместо имени домена(example.com)?

ChAnton ★★ ()
Ответ на: комментарий от ChAnton

Извини, тупанул. Ниже правильно ответили.

git работает поверх ssh. Если ключей несколько, то ssh либо перебирает все, либо юзает тот, который явно прописан в ~/.ssh/config для данного хоста.

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

Apple-ch ★★ ()
Ответ на: комментарий от ChAnton

Где «там»? Один файл id_rsa{,.pub} вмещает один ключ. Какой указали в качестве IdentityFile, такой ssh (не Git, он тут ни при чём) и подберёт.

Вместо example.com указывать можно всё, что съест ssh в качестве адреса хоста. У меня это, например, «msuprogclub», а в .ssh/config сказано:

Host msuprogclub
        HostName XXX.XXX.XXX.XXX
        IdentityFile ~/.ssh/XXX

(Так сделано для того, чтобы не теряться, если вдруг сломается DNS на сервере).

AITap ★★★★★ ()
Ответ на: комментарий от AITap

Теперь при коннекте пишет вот это:

git push origin master fatal: 'git/repo.git' does not appear to be a git repository fatal: The remote end hung up unexpectedly

В логах:

  • Jun 6 20:13:13 ip-y-y-y-y sshd[17064]: Accepted publickey for giro from x.x.x.x port 9750 ssh2
  • Jun 6 20:13:13 ip-y-y-y-y sshd[17064]: pam_unix(sshd:session): session opened for user giro by (uid=0)
  • Jun 6 20:13:14 ip-y-y-y-y sshd[17146]: Received disconnect from x.x.x.x: 11: disconnected by user
  • Jun 6 20:13:14 ip-y-y-y-y sshd[17064]: pam_unix(sshd:session): session closed for user giro
ChAnton ★★ ()
Последнее исправление: ChAnton (всего исправлений: 2)

Поставь gitolite.

Прямо в виде текста вписывать в файлик?

man ssh-add
gitolite сам управляет ключами, тебе надо просто скачать админский репозиторий к себе, поправить конфиг, где перечислить репозитории и кинуть в папку ключи. Запушить и всё. Выбирание ключа для хоста осуществляется далее полностью на клиентской стороне через ~/.ssh/config и config внутри .git нужного репозитория из gitolite

Deleted ()
Ответ на: комментарий от ChAnton

Есть репозиторий git на сервере, инициированный командой:
git init --bare --share

'git/repo.git'

Где именно расположен репозиторий? Директория git/repo.git точно существует и является репозиторием?

AITap ★★★★★ ()
Ответ на: комментарий от Deleted

Да уже разобрался. Там проблема с разрешениями была на директорию гита. ssh-add тоже использовал, там еще ssh-agent пришлось запускать. Но ~/.ssh/config конечно удобнее. Сейчас решил gitorius поставить.

Кстати, а что лучше использовать, gitolite или gitosis?

ChAnton ★★ ()
Ответ на: комментарий от AITap

Спасибо, уже разобрался. Указал абсолютный путь в командах git remote/git clone просто и необходимые разрешения дал:

  • #cd /to/git/repo.git
  • #sudo chmod -R g+ws *
  • #sudo chgrp -R user *
  • #git repo-config core.sharedRepository true

Все клонируется, фечиться и пушиться)))

ChAnton ★★ ()
Последнее исправление: ChAnton (всего исправлений: 3)
Ответ на: комментарий от ChAnton

ssh-agent пришлось запускать. Но ~/.ssh/config конечно удобнее

ssh-agent всё равно придётся запускать, если ты не хочешь вбивать пассфразы на каждое соединение с репозиторием. Если, конечно, у ключа была пассфраза.

gitolite или gitosis?

gitosis уже давно рипнулся, не?

Deleted ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.