Git: репозиторий с SSH-доступом и авторизация по SSH из Windows

Автор: | 04/15/2015
 

git-logoЗадача: создать центральный репозиторий на сервере.

Доступ к репозиторию – по SSH (настройка с доступом по HTTP описана в посте Git: свой репозиторий под NGINX + WebDAV + uWSGI, но это долгий и муторный способ).

Авторизация – по RSA-ключу.

Установка выполняется на:

# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 7.8 (wheezy)
Release:        7.8
Codename:       wheezy

И Windows 8 на клиентской машине.

На сервере устанавливаем Git:

# aptitude install git

Создаём пользователя:

# adduser git
Adding user `git' ...
...
Is the information correct? [Y/n] y

Переключаемся на него:

# su -l git

Создаём каталог для репозитория:

$ mkdir -p ~/repos/test.git && cd repos/test.git

Инициализируем его:

$ git init --bare
Initialized empty Git repository in /home/git/repos/test.git/

Обновляем информацию о сервере:

$ git update-server-info
$ ls -l
total 32
drwxr-xr-x 2 git git 4096 Apr 14 05:12 branches
-rw-r--r-- 1 git git   66 Apr 14 05:12 config
-rw-r--r-- 1 git git   73 Apr 14 05:12 description
-rw-r--r-- 1 git git   23 Apr 14 05:12 HEAD
drwxr-xr-x 2 git git 4096 Apr 14 05:12 hooks
drwxr-xr-x 2 git git 4096 Apr 14 05:12 info
drwxr-xr-x 4 git git 4096 Apr 14 05:12 objects
drwxr-xr-x 4 git git 4096 Apr 14 05:12 refs

С клиентской машины – проверяем:

> git clone git@172.***.***.5:/home/git/repos/test.git
Cloning into 'test'...
The authenticity of host '172.***.***.5 (172.***.***.5)' can't be established.
ECDSA key fingerprint is 9e:5c:c2:05:bf:db:fc:c1:1c:d9:1f:3c:b2:c5:4a:5d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.***.***.5' (ECDSA) to the list of known hosts.
git@172.***.***.5's password:
warning: You appear to have cloned an empty repository.
Checking connectivity... done.
d:Repos>dir /b
test

Готово.

Осталось настроить авторизацию по ключу.

Как сгенерировать свой ключ под Windows – описано в статье Putty: настройка авторизации SSH по ключу.

Создаём ключ, и приватную часть добавляем в Pageant.

На сервере в файле /etc/ssh/sshd_config включаем авторизацию по ключу:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  %h/.ssh/authorized_keys

Перезапускаем демон sshd:

# service ssh restart
Restarting OpenBSD Secure Shell server: sshd.

Вписываем публичную часть своего ключа (её можно увидеть в Puttygen) в файл /home/git/.ssh/authorized_keys.

На Windows-машине добавляем переменную GIT_SSH, котоаря указывает на plink.exe:

> set GIT_SSH=d:OptPuttiesplink.exe

Проверяем:

> git clone git@172.***.***.5:/home/git/repos/test.git
Cloning into 'test'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.

Готово.