Как получить доступ к ssh-ключам пользователя из программы, которая запускается с помощью sudo?

Дилемма: программа для Linux, над которой я работаю, должна:

  1. Получить «пакет» по протоколу git+ssh:// (используя Git).
  2. Установите этот «пакет» в систему.

Чтобы git+ssh работал, Git должен видеть мои ключи.

Для «пакетной» установки программа должна иметь права суперпользователя.

Ограничение: программа не должна повышать привилегии (вызывать sudo) сама по себе. Пользователь должен явно вызвать его с помощью sudo. (Давайте проигнорируем случай, когда пользователь запускает программу, войдя в систему как root — при условии, что тогда он правильно настроит ключи.)

Итак, вопрос: как сделать доступ по ssh с пользовательскими ключами из программы, которая вызывается с помощью sudo?


person Alexander Gladysh    schedule 04.01.2011    source источник


Ответы (1)


используйте параметры ssh -i identity_file. Чтобы указать git использовать правильную команду, вы должны установить переменную GIT_SSH в файл, который будет вызывать ssh -i "$@".

Если вы не можете этого сделать, вам следует отказаться от привилегий, пока вы выполняете команду git pull.

sudo -u <original_user> git fetch git+ssh:// 

Вы можете использовать переменную среды ${SUDO_USER}, чтобы узнать, кто был первоначальным пользователем.

person Mihai Toader    schedule 04.01.2011
comment
Нет, это не сработает. У пользователя может быть настроен ssh-агент, и, кроме того, программа не имеет возможности узнать имя файла идентификации (у пользователя его может и не быть). - person Alexander Gladysh; 04.01.2011
comment
Затем вы должны отказаться от привилегий, пока выполняете команду git pull. sudo -u ‹original_user› git fetch git+ssh:// - person Mihai Toader; 04.01.2011
comment
Хорошая идея. Есть ли способ узнать имя пользователя? - person Alexander Gladysh; 04.01.2011
comment
Погуглил: переменная окружения ${SUDO_USER}. Пожалуйста, добавьте еще один ответ с этой информацией, и я приму его. Спасибо! - person Alexander Gladysh; 04.01.2011