Как правильно использовать git с репозиториями gnome-keyring и http (s)?

43

В настоящее время всякий раз, когда я git pullили git pushв хранилище http (s), я получаю следующее:

$ git pull
Username for 'https://gitrepos.reposdomain.com': me@mydomain.com
Password for 'https://me@mydomain.com@gitrepos.reposdomain.com': 

Это нормально для нечастого использования, но начинает очень быстро раздражать. К сожалению, переключение на ssh в этом случае не вариант.

Я читал, что более ранние версии gitпредоставляли учетные данные «store» и «cache», но этого не советовали, потому что он хранил пароль в виде открытого текста.

НО

Более новые версии gitочевидно хранят учетные данные git в gnome-keyring, но это должно быть настроено правильно.

Я попытался следовать другим (не Ubuntu) ответам на SO, чтобы заставить это работать (а именно этот ), но мне все еще предоставляют приглашение имени пользователя и пароля.

Как правильно и безопасно хранить gitучетные данные для репозиториев http (s) и как заставить их работать в Ubuntu?

Tu-Reinstate Моника-Дор Дух
источник
Вы должны указать, какие методы вы попробовали. В противном случае вы можете найти ответы, предлагающие именно эти.
Муру
@muru Почему вы убрали акцент, который я добавил для удобства чтения? Теперь это просто кусок текста и причины, которые отличают вопрос от других, а реальный вопрос менее очевиден.
Tu-Reinstate Моника-Дор Дух
Весь приговор жирным шрифтом и курсивом едва читаемыми.
Муру
1
@ Муру, я прошу отличаться. Я считаю, что текст, выделенный полужирным шрифтом и курсивом, выделяет основные части вопроса.
Tu-Reinstate Моника-Дор Дух

Ответы:

45

gnome-credential-helper сейчас устарела.

Вместо этого используйте libsecret. Если он еще не встроен в вашу Ubuntu, используйте следующую процедуру:

  1. Вы можете установить libsecretи библиотеки разработки с:

    sudo apt-get install libsecret-1-0 libsecret-1-dev

  2. Тогда вам нужно построить диспетчер учетных данных

    cd /usr/share/doc/git/contrib/credential/libsecret

    sudo make

  3. Наконец, вы должны указать git на вновь созданный файл в вашей конфигурации:

    git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret

Более подробная информация на https://stackoverflow.com/a/40312117/2017781

eddygeek
источник
1
Вы можете заметить, что это решение применимо только к версиям git> = 2.11 (где затем можно найти
каталог libsecret
1
Это безопасно? Где хранятся секреты? Безопасна ли передача и хранение? Есть ли официальная документация? Видимо, согласно этой странице и этой странице , она находится в «Основном» и поддерживается Debian / Ubuntu. И: «Он связывается с« Секретной службой »с помощью DBus».
caw
1
@caw: в GNOME «Секретная служба» - это тот же демон gnome-keyring-daemon, только через другой API. (План libsecret состоял в том, чтобы позволить другим DE создавать свои собственные бэкэнды, поддерживающие тот же API, например, KDE планировал реализовать это в kwalletd.)
gravity
5
Обновление моего предпочтительного ответа, поскольку я могу убедиться, что это работает 18.04. :)
Tu-Reinstate Моника-Дор-Дух
44

Вам нужно настроить Git credential helperс помощью Gnome Keyring:

Установите и скомпилируйте Gvel Keyring devel:

sudo apt-get install libgnome-keyring-dev
sudo make --directory=/usr/share/doc/git/contrib/credential/gnome-keyring

И настройте учетные данные:

git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring

источник
Это действительно странно. Семантически не должно быть никакой разницы между ответом в ссылке и этим ответом. Но по какой-то причине этот ответ работает там, где другой нет.
Tu-Reinstate Monica-dor duh
Затем запустите git pushили git pullкак обычно, и в первый раз он запросит хранилище ansd и каждый раз после этого получит его из набора ключей. Чтобы проверить это, запустите seahorse. Он должен быть указан в разделе «Пароли» -> «Логин».
Tu-Reinstate Monica-dor duh
@tudor Странно, я не вижу никакой «концептуальной» разницы между моим ответом и ссылкой. Рад, что это помогает.
Мне кажется странным, что вам все еще нужно выполнить команду "make", но эти шаги работают отлично. Благодарность!
DaveTheScientist
2

Этот простой подход кажется достаточным для моей Ubuntu 18.04.1 с git 2.17.1:

git config --global credential.helper cache

Вы можете указать один час (= 3600 секунд), как это:

git config --global credential.helper 'cache --timeout=3600'

Дальнейшее чтение в прекрасном руководстве .

Стефан Хеннингсен
источник