Использование ключей SSH для работы с Gitlab
Применение ключей вместо паролей позволяет усилить защищенность сервера и автоматизировать выполнение операций. Настройка в соответствии с данной инструкцией не отменяет и не меняет возможности использования веб-интерфейса Gitlab.
Каждый пользователь Gitlab, которому необходим доступ при помощи SSH, должен владеть ключевой парой, состояющей из двух файлов: открытого и зарытого ключей. Содержимое файла открытого ключа должно быть размещено в профиле пользователя Gitlab и, кстати, может быть использовано на любых серверах и в сервисах, предоставляющих доступ при помощи SSH. Файл закрытого ключа должен быть сохранен пользователем таким образом, чтобы обеспечивалась его конфиденциальность, целостность и доступность.
Если у пользователя нет ключевой пары, ее необходимо сгенерировать. Рекомендуется при генерации использовать алгоритм ED25519 (по-умолчанию может применяться RSA). Например, при помощи утилиты командной строки в ОС Linux генерацию можно выполнить следующим образом:
При генерации будет запрошен ввод парольной фразы. Рекомендуется игнорировать ввод парольной фразы исключительно только в случае использования ключа в полностью автоматическом режиме (например, в скриптах, выполняющихся по расписанию без непосредственного участия оператора).
После генерации ключевой пары, в текущей директории будут созданы файлы: username_key (файл закрытого ключа) и username_key.pub (файл открытого ключа).
Чтобы разместить содержимое файла открытого ключа в профиле Gitlab, выведите его на экран:
Скопируйте содержимое файла в буфер обмена без символа перевода строки в конце.
Добавьте содержимое файла открытого ключа в профиль пользователя Gitlab. Для этого перейдите кликните на аватар пользователя, нажмите Edit profile, затем SSH Keys, после этого Add new key. В поле key вставьте из буфера обмена содержимое ключа, введите срок действия ключа (или сбросьте его, сделав бесконечным) и нажмите Add key.
Теперь, чтобы проверить соединение с сервером, на ПК выполните команду:
Если все работает, должно появиться сообщение "Welcome to Gitlab, @username!"
Чтобы клонировать репозиторий выполните команду:
git -c core.sshCommand="ssh -i /home/username/username_key -p 22" clone git@gitlab.domain.local:dir/repo_name.git
После редактирования файлов, как обычно, добавьте их в отслеживаемые:
Зафиксируйте изменения:
Передайте репозиторий на сервер:
Обратите внимание, что в некоторых командах явно указывается SSH-порт сервера (по-умолчанию 22). Это сделано специально, чтобы указать, что в этих командах требуется явное указание порта, если на вашем сервере он отличается от значения по-умолчанию.
Примечание для администратора сервера:
Чтобы описанное выше работало, конфигурация сервиса OpenSSH на сервере должна использовать для пользователей Gitlab значение параметра AuthorizedKeysFile по-умолчанию.
Пример конфигурации с некоторыми полезными комментариями:
AddressFamily inet
AllowAgentForwarding no
AllowStreamLocalForwarding no
AllowTcpForwarding no
#
#AllowUsers username@192.168.1.10 <-- Глобальная опция отключена, т.к. пользователи Gitlab могут подключаться
# с динамических IP
#
AuthenticationMethods publickey
#
#AuthorizedKeysFile /etc/ssh/authorized-keys/%u <-- Глобальная опция отключена, т.к. пользователи Gitlab
# не создаются в ОС
#
Banner none
DebianBanner no
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
ClientAliveCountMax 1
ClientAliveInterval 300
DisableForwarding yes
KbdInteractiveAuthentication no
KexAlgorithms ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group14-sha1
KexAlgorithms diffie-hellman-group-exchange-sha256
#
#ListenAddress 192.168.1.20 <-- Глобальная опция может быть включена, если необходимо
#
LoginGraceTime 20
LogLevel VERBOSE
MACs hmac-sha2-256,hmac-sha2-512,hmac-sha1
MaxAuthTries 3
PermitEmptyPasswords no
PermitRootLogin no
PubkeyAuthentication yes
SyslogFacility AUTHPRIV
Subsystem sftp /usr/lib/openssh/sftp-server
X11Forwarding no
X11UseLocalhost no
Compression no
MaxSessions 2
Port 2114
TCPKeepAlive no
UseDNS no
UsePAM yes
Match User administrator
#
AuthorizedKeysFile /etc/ssh/authorized-keys/%u # <-- Для пользователя administrator открытый ключ загружается
# из указанной папки
AuthenticationMethods publickey password # <-- Администратору можно использовать и ключ и пароль
# (необходимо для некоторых утилит)
#
PasswordAuthentication yes
#
# <-- Указанный ниже блок о параметрах пользователя не нужен, т.к. на него распространяются значения по-умолчанию
#Match User username
#AuthenticationMethods publickey password
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
#AuthorizedKeysFile /etc/ssh/authorized-keys/username
#