2015-12-16 2 views
3

Скажите, что имеется большой список открытых ключей ssh ​​в ~/.ssh/authorized_keys на сервере с репозиториями Git с общим форматом «[email protected]»,Проверить authorized_keys, чтобы узнать, какой ключ использовался для нажатия фиксации

Я хочу написать сценарий bash для крюка pre-receive, который проверяет, какой ключ SSH использовался для толкания фиксации, а затем выполняет определенные операции над фиксацией до его получения. Таким образом, план сценария будет ..

#!/bin/sh 
# 
<Check key which was used from authorized_keys for the commit> 
<Print email corresponding to the SSH key to a file as a log> 
<Do some other stuff here> 

Но поскольку сервер хранит открытые ключи и закрытые ключи используются, чтобы раздвинуть фиксаций, можно проверить, какой ключ был использован? Если да, то как?

Извините, если мне не хватает чего-то очевидного, просто нужно какое-то направление, чтобы начать.

Любая помощь приветствуется, спасибо.

+1

Это, с определенной сантехникой, именно то, как гитолит выполняет свою работу. –

+0

Спасибо, что указали это. Я смотрю на гитолит, выглядит многообещающе. Тем не менее, я все еще думаю, что я мог бы использовать ssh с bash для сравнения ключей с фиксацией с авторизованными ключами. – Ankit

+0

@Ankit. Что вы подразумеваете под «какой ключ SSH использовался для совершения»? Конец был сделан на стороне клиента, и ему не нужен какой-либо SSH-ключ. Вы хотите сказать, какой ключ SSK использовался для PUSH? –

ответ

1

Вы можете отредактировать файл ~/.ssh/authorized_keys, чтобы включить переменную окружения или пользовательскую команду для запуска, связанные с каждым ключом.

Допустим, у вас есть следующие открытые ключи в файле authorized_keys:

ssh-rsa AAAA.... [email protected] 
ssh-rsa AAAA.... [email protected] 
ssh-rsa AAAA.... [email protected] 

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

environment="[email protected]" ssh-rsa AAAA.... [email protected] 
environment="[email protected]" ssh-rsa AAAA.... [email protected] 
environment="[email protected]" ssh-rsa AAAA.... [email protected] 

Теперь в сценарии, вы можете просто получить доступ к EMAIL переменной:

#!/bin/sh 

sendmail "$EMAIL" <<EOF 
To: $EMAIL 
From: [email protected] 

This is a test message 
EOF 

Обратите внимание, что этот механизм должен использоваться для удобства, если вы доверяете своим пользователям, а не безопасность, если вы хотите, чтобы это не могло быть искажено. Если вы хотите, чтобы это было безопасно, чтобы пользователи не могли вмешиваться в него, вам нужно использовать функцию принудительной команды, в которой весь доступ проходит через команду оболочки, которая позволяет запускать только определенные команды Git. Вы можете написать свой собственный обертку для этого, но если вы собираетесь спуститься по этому маршруту, то просто используйте gitolite, вероятно, лучшее решение. Если вы действительно хотели реализовать это, gitolite has a page explaining how it works.

+0

Удивительный! Это может сработать. Это не для безопасности, я хочу стандартизировать фиксацию, сделанную пользователями, в git-репозитории, так как у нас были люди с несколькими адресами электронной почты, используя один и тот же ключ ssh. Это должно помочь. – Ankit

0

Проблема заключается в том, что gitolite может использовать ключ SSH только потому, что он использует ssh "forced command" feature, который позволяет регистрировать (в ~/.ssh/authorized-keys) скрипт (the forced command), который будет работать независимо от того, какая команда вам первоначально указано.

Без этого, как указано в «Can I find out which ssh key was used to access an account?», вам нужно будет parse the sshd logs или модифицировать ~/.ssh/authorized-keys в некоторых отношениях (например, добавление environment variables).

Смежные вопросы