Есть ли способ кэшировать учетные данные GitHub для отправки коммитов?

1867

Недавно я переключился на синхронизацию своих репозиториев с https: // на GitHub (из-за проблем с брандмауэром), и он каждый раз запрашивает пароль.

Есть ли способ кэшировать учетные данные вместо аутентификации каждый раз git push?

Zepplock
источник
1
См. Также superuser.com/questions/199507/…
полковник Паник
2
Теперь вы можете использовать учетную запись помощника для шифрования _netrcфайла, содержащего ваши учетные данные. Смотрите мой ответ ниже . Я обнаружил, что безопаснее, чем git-credential-winstore.exe(кэш памяти), который немного глючит в Windows.
VonC
git-credential-winstoreработал лучше всего для Windows. Что глючит? Настройка ssh является предпочтительным вариантом, хотя я делал это несколько раз, он более подвержен ошибкам, а иногда просто не работает, когда вам нужно подключиться к нескольким хостам.
Брон Дэвис
2
Под «сертификатом SSH» я предполагаю, что вы имеете в виду «закрытый ключ SSH».
Майкл Миор

Ответы:

2369

С Git версии 1.7.9 и выше

Начиная с Git 1.7.9 (выпущенной в конце января 2012 года), в Git существует изящный механизм, позволяющий избежать необходимости постоянно вводить пароль для HTTP / HTTPS, называемый помощниками по учетным данным . (Благодаря Дазонику за указание на эту новую функцию в комментариях ниже.)

С Git 1.7.9 или новее вы можете просто использовать один из следующих помощников по учетным данным:

git config --global credential.helper cache

... который говорит Git хранить ваш пароль в кеше (по умолчанию) в течение 15 минут. Вы можете установить более длительное время ожидания с помощью:

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

(Этот пример был предложен в странице справки GitHub для Linux .) При желании вы также можете хранить свои учетные данные постоянно, см. Другие ответы ниже.

Помощь GitHub также предполагает, что если вы используете Mac OS X и используете Homebrew для установки Git, вы можете использовать встроенное хранилище ключей Mac OS X с:

git config --global credential.helper osxkeychain

Для Windows существует помощник Git Credential Manager для Windows или wincred в msysgit .

git config --global credential.helper wincred # obsolete

С Git для Windows 2.7.3+ (март 2016 г.):

git config --global credential.helper manager

Для Linux вы можете использоватьgnome-keyring (или другую реализацию ключей, такую ​​как KWallet).

С версиями Git до 1.7.9

В версиях Git до 1.7.9 эта более безопасная опция недоступна, и вам потребуется изменить URL-адрес, originиспользуемый вашим пультом, чтобы включить пароль следующим образом:

https://you:password@github.com/you/example.git

... другими словами, :passwordпосле имени пользователя и до@ .

Вы можете установить новый URL для вашего originпульта с помощью:

git config remote.origin.url https://you:password@github.com/you/example.git

Убедитесь, что вы используете https, и вы должны знать, что если вы сделаете это, ваш пароль GitHub будет храниться в виде открытого текста в вашем .gitкаталоге, что, очевидно, нежелательно.

С любой версией Git (ну, начиная с версии 0.99)

Альтернативный подход заключается в том, чтобы ввести свое имя пользователя и пароль в ~/.netrcфайл, хотя, как и в случае с сохранением пароля в удаленном URL-адресе, это означает, что ваш пароль будет храниться на диске в виде простого текста и, следовательно, будет менее безопасным и не рекомендуется. Однако, если вы хотите использовать этот подход, добавьте следующую строку в ваш ~/.netrc:

machine <hostname> login <username> password <password>

... заменить <hostname>на имя хоста сервера, <username>а также <password>на ваше имя пользователя и пароль. Также не забудьте установить ограничительные разрешения файловой системы для этого файла:

chmod 600 ~/.netrc

Обратите внимание, что в Windows этот файл должен вызываться _netrc, и вам может потребоваться определить переменную среды% HOME% - для получения дополнительной информации см .:

Марк Лонгэйр
источник
72
Не храните свой пароль в виде простого текста. Начиная с Git 1.7.9 вы можете использовать учетные данные помощников. git config --global credential.helper osxkeychainна OS X. Для других ОС см. help.github.com/articles/set-up-git
dazonic
6
FWIW, брелок osx является частью базового исходного кода GIT, он не является эксклюзивным компонентом Brew или MacPorts или какой бы то ни было разновидностью месяца. И вам даже не нужно создавать git с нуля - просто cd contrib / credential / osxkeychain / и запустите make.
synthesizerpatel
2
При двухфакторной аутентификации вы должны использовать то, что github называет токеном доступа пользователя . На самом деле вы всегда должны использовать один, так как в отличие от пароля вы можете контролировать, какой доступ он дает. Просто замените пароль в URL, чтобы вы в конечном итоге https://username:PERSONAL_ACCESS_TOKEN@github.com/username/project.git. Это делает обычные текстовые пароли, хранящиеся на диске, практически безопасными для использования.
Рассел Стюарт
12
git config --global credential.helper cacheне работает на Windows: stackoverflow.com/questions/11693074/… используйте gitcredentialstore на Windows и будьте счастливы
Себастьян Дж.
8
Любой способ установить это время на бесконечность?
Судо
720

Вы также можете сделать так, чтобы Git постоянно сохранял ваши учетные данные, используя следующее:

git config credential.helper store

Примечание. Хотя это удобно, Git будет хранить ваши учетные данные в виде открытого текста в локальном файле (.git-credentials) в каталоге вашего проекта (см. Ниже каталог «home»). Если вам это не нравится, удалите этот файл и переключитесь на использование опции кеша.

Если вы хотите, чтобы Git продолжал запрашивать учетные данные каждый раз, когда ему нужно подключиться к удаленному репозиторию, вы можете запустить эту команду:

git config --unset credential.helper

Чтобы хранить пароли в .git-credentialsвашем %HOME%каталоге, а не в каталоге проекта: используйте --globalфлаг

git config --global credential.helper store
Гири Алвар
источник
7
В Windows вы можете скачать помощник утилита настраивает вещи для хранения зашифрованной версии вашего пароля ГИТ в Windows , Creditial Store, см confluence.atlassian.com/display/STASH/...
репорт
76
Я обнаружил, что мне нужно было указать --global, иначе он попытается сохранить настройки в текущем репозитории:git config --global credential.helper store
Брайан Гордон
6
Зачем делать кеш вместо постоянного хранения? Совместное использование компьютеров или что-то?
Майкл Дж. Калкинс
2
@BrianGordon Я использую GIT 1.9.5 в Windows, и --globalфлаг был избыточным. Даже без этого флага файл учетных данных был создан в %USER_HOME%каталоге.
jFrenetic
2
если он не хранится в виде обычного текста, чем он защищен? Твой пароль? Разве не нужно было бы спрашивать ваш пароль администратора при подключении к git? Не странно ли вводить пароль, чтобы получить другой пароль?
Cruncher
101

TLDR; Используйте зашифрованный файл netrc с Git 1.8.3+ .

Сохранение пароля для URL-адреса HTTPS хранилища Git возможно с помощью ~/.netrc(Unix) или %HOME%/_netrc(обратите внимание _) в Windows.

Но : этот файл будет хранить ваш пароль в виде простого текста.

Решение : шифровать этот файл с помощью GPG (GNU Privacy Guard) , и сделать Git расшифровать его каждый раз , когда он нуждается пароль (для push/ pull/ fetch/ cloneоперации).


Примечание: с Git 2.18 (Q2 2018) вы теперь можете настроить GPG, используемый для расшифровки зашифрованного .netrcфайла.

Смотрите коммит 786ef50 , коммит f07eeed (12 мая 2018 г.) Луиса Марсано (``) .
(Слито Junio C Hamano - gitster- в фиксации 017b7c5 , 30 мая 2018 года)

git-credential-netrc: принять gpgвариант

git-credential-netrcбыло жестко закодировано для расшифровки с ' gpg' независимо от опции gpg.program.
Это проблема в таких дистрибутивах, как Debian, которые называют современную GnuPG чем-то другим, например ' gpg2'


Пошаговые инструкции для Windows

С Windows:

(Git имеет gpg.exeв своем дистрибутиве, но использование полной установки GPG включает в себя gpg-agent.exe, который запоминает вашу фразу-пароль, связанную с вашим ключом GPG.)

  • Установите gpg4Win Liteминимальный интерфейс командной строки gnupg (возьмите самый последнийgpg4win-vanilla-2.X.Y-betaZZ.exe ) и заполните PATH установочным каталогом GPG:

    set PATH=%PATH%:C:\path\to\gpg
    copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe

(Обратите внимание на команду ' copy': Git понадобится скрипт Bash для выполнения команды ' gpg'. Поскольку он gpg4win-vanilla-2поставляется gpg2.exe, вам нужно продублировать его.)

  • Создайте или импортируйте ключ GPG и доверяйте ему:

    gpgp --import aKey
    # or
    gpg --gen-key

(Удостоверьтесь, чтобы поставить ключевую фразу к этому ключу.)

  • Доверься этому ключу

  • Установите вспомогательный сценарий учетных данных в каталоге внутри вашего %PATH%:

    cd c:\a\fodler\in\your\path
    curl -o c:\prgs\bin\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl

(Осторожно: скрипт переименован в Git 2.25.x / 2.26, см. Ниже)

(Да, это скрипт Bash, но он будет работать в Windows, так как он будет вызываться Git.)

  • Сделайте файл _netrc открытым текстом

    machine a_server.corp.com
    login a_login
    password a_password
    protocol https
    
    machine a_server2.corp.com
    login a_login2
    password a_password2
    protocol https

(Не забывайте ' protocol' part: ' http' или ' https' в зависимости от того, какой URL вы будете использовать.)

  • Зашифруйте этот файл:

    gpg -e -r a_recipient _netrc

(Теперь можно удалить в _netrcфайл, сохраняя только _netrc.gpgзашифрованный один.)

  • Используйте этот зашифрованный файл:

    git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"

(Обратите внимание на ' /': C:\path\to...вообще не будет работать.) (Вы можете сначала использовать, -v -dчтобы увидеть, что происходит.)

С этого _netrc.gpgмомента любая команда Git, использующая URL-адрес HTTP (S), который требует аутентификации, будет расшифровывать этот файл и использовать логин / пароль, связанный с сервером, с которым вы связываетесь. В первый раз, GPG попросит вас ввести пароль вашего ключа GPG, чтобы расшифровать файл. В других случаях gpg-agent, автоматически запускаемый при первом вызове GPG, предоставит вам эту фразу-пароль.

Таким образом, вы можете запомнить несколько URL / логинов / паролей в одном файле и хранить их на своем диске в зашифрованном виде.
Я нахожу это более удобным, чем «помощник по кешированию», где вам нужно запомнить и ввести (один раз за сеанс) разные пароли для каждой из ваших удаленных служб, чтобы указанный пароль кэшировался в памяти.


В Git 2.26 (Q1 2020) пример помощника по .netrcучетным данным для использования был обновлен для работы из коробки. Смотрите патч / обсуждение .

См. Коммит 6579d93 , коммит 1c78c78 (20 декабря 2019 г.) от Denton Liu ( Denton-L) .
(Слиты Junio C Hamano - gitster- в фиксации 1fd27f8 , 25 дек 2019)

contrib/credential/netrc: сделать PERL_PATHнастраиваемым

Подписано: Дентон Лю

Путь к шебангу для интерпретатора Perl git-credential-netrcбыл жестко закодирован.
Однако некоторые пользователи могут располагать его в другом месте и, следовательно, должны были бы вручную отредактировать скрипт.

Добавьте .perlпрефикс к сценарию, чтобы обозначить его как шаблон и игнорировать созданную версию.
Дополните в Makefileтаким образом , что он создает git-credential-netrcиз git-credential-netrc.perl, так же как и другие скрипты Perl.

Рецепты Makefile были бесстыдно украдены contrib/mw-to-git/Makefile.

А также:

В версии 2.26 (первый квартал 2020 года) обновлен пример помощника по учетным данным для использования .netrc.

См. Коммит 6579d93 , коммит 1c78c78 (20 декабря 2019 г.) от Denton Liu ( Denton-L) .
(Слиты Junio C Hamano - gitster- в фиксации 1fd27f8 , 25 дек 2019)

contrib/credential/netrc: работа вне репо

Подписано: Дентон Лю

В настоящее время git-credential-netrcне работает вне git-репозитория. Это терпит неудачу со следующей ошибкой:

fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.

Тем не менее, нет никакой реальной причины, почему нужно быть в хранилище. Помощники по учетным данным должны иметь возможность нормально работать и вне хранилища.

Вызовите версию non-self, config()чтобы git-credential-netrcбольше не нужно было запускать в репозитории.

Джефф Кинг ( peff) добавляет:

Я предполагаю, что вы используете gpg-зашифрованный netrc(если нет, то вы должны просто использовать credential-store).
Для доступа по паролю "только для чтения" я считаю, что комбинация passс config выглядит немного лучше:

[credential "https://github.com"]
  username = peff
  helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"
VonC
источник
1
попробую то же самое в Linux .. git config --local credential.helper "netrc -f /home/me/.netrc.gpg -v -d" ..и я получаю "git: 'credential-netrc' не является команда git. смотрите 'git --help' "
солнечный
4
@sunny Вот для чего curl -o c:\prgs\bin\git-credential-netrc https://raw.github.com/git/git/master/contrib/credential/netrc/git-credential-netrc: вам нужно скопировать git-credential-netrcлюбое место в вашем пути ( $PATH), чтобы git мог вызывать ' credential-netrc'.
VonC
Ну, у _netrcменя не работает на Windows 7ПК, но .netrcработает для youtube-dl с --netrcаргументом, переданным ему.
Юлиан Онофрей
@VonC, кажется, текущий URL https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl(по прошествии семи лет 😉)
Гвинет Ллевелин
1
@GwynethLlewelyn Спасибо. Я отредактировал ответ соответственно. Не стесняйтесь редактировать его самостоятельно, если вы видите любую другую устаревшую информацию.
VonC
43

Существует простой старомодный способ хранения учетных данных пользователя в URL-адресе HTTPS:

https://user:password@github.com/...

Вы можете изменить URL с помощью git remote set-url <remote-repo> <URL>

Очевидным недостатком этого подхода является то, что вы должны хранить пароль в виде простого текста. Вы все еще можете просто ввести имя пользователя ( https://user@github.com/...), которое, по крайней мере, сэкономит вам половину хлопот.

Вы можете предпочесть перейти на SSH или использовать клиентское программное обеспечение GitHub.

wortwart
источник
2
Возможно, необходимо закодировать имя пользователя / пароль, см. Stackoverflow.com/a/34611311/3906760
MrTux,
43

Используйте хранилище учетных данных.

Для Git 2.11+ на OS X и Linux , использование Git встроенный в верительном магазине :

git config --global credential.helper libsecret

Для msysgit 1.7.9+ в Windows :

git config --global credential.helper wincred

Для Git 1.7.9+ на OS X используйте:

git config --global credential.helper osxkeychain
roo2
источник
2
Я уверен, что это путь, но я, к сожалению, получаю сообщение об ошибке:git: 'credential-gnome-keyring' is not a git command. See 'git --help'.
codepleb
1
Спасибо, но я получаю ту же ошибку как-то. Я делаю что-то неправильно? Я набираю команду, и ничего не происходит. Как только я нажимаю, меня просят ввести учетные данные, которые я успешно вставил, но я получаю ошибку, что это не команда git после этого.
codepleb
2
Прежде чем libsecret будет работать в Linux, вам нужно выполнить следующие шаги: stackoverflow.com/a/40312117/775800
Lavamantis
1
Еще одна вещь - если у вас включена поддержка 2FA на Github, ваш пароль не будет работать. Но вы можете создать личный токен доступа на своей странице «Настройки» в Github, и этот токен будет работать как ваш пароль. github.com/github/hub/issues/822
Lavamantis
3
Проблема безопасности: диспетчер учетных данных Windows делает ваш открытый текстовый пароль доступным любому, кто вошел в вашу учетную запись Windows. Все, что им нужно сделать, это отправить запрос диспетчеру учетных данных, например printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( подробнее здесь ). Вы должны всегда использовать личный токен доступа и, конечно, использовать 2FA в своей учетной записи GitHub.
CJS
40

Вы можете просто использовать

git config credential.helper store

Когда вы в следующий раз введете пароль с помощью команды pull или push, он будет сохранен в файле .git-credentials в виде простого текста (немного небезопасно, но просто помещается в защищенную папку).

И это все, как указано на этой странице:

git-credential-store

sgoran
источник
3
Для Git для Windows 2.7.3 (март 2016 г.): github.com/git-for-windows/git/releases?after=v2.8.4.windows.1 , это будет git config credential.helper managerвместо этого
VonC
23

Для меня не сразу было очевидно, что мне нужно сначала скачать помощника! Я нашел загрузку credential.helper в Atlassian's Постоянная аутентификация в репозиториях Git .

Quote:

Выполните следующие действия, если вы хотите использовать Git с кэшированием учетных данных в OS X:

Загрузите двоичный файл git-credential-osxkeychain.

Запустите команду ниже, чтобы убедиться, что двоичный файл является исполняемым:

chmod a+x git-credential-osxkeychain

Поместите это в каталог /usr/local/bin .

Запустите команду ниже:

git config --global credential.helper osxkeychain
Бен
источник
23

Просто включите регистрационные данные как часть URL:

git remote rm origin
git remote add origin https://username:mypassword@github.com/path/to/repo.git

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

Тарун Гупта
источник
12
это сработает, вы должны уйти @ с% 40 в вашем электронном идентификаторе
Тарун Гупта
Что если у нас есть «+» в идентификаторе электронной почты? Я попробовал тот же побег, но толчок сказал «репо не найдено»
killjoy
4
есть% 2B вместо +
Тарун Гупта
Хранение пароля в виде простого и легкодоступного пароля может быть не самым оптимальным решением.
снижение активности
20

На установке GNU / Linux ~ / .netrc тоже работает довольно хорошо:

$ cat ~/.netrc
machine github.com login lot105 password howsyafather

Это может зависеть от того, какие сетевые библиотеки Git использует для транспорта HTTPS .

helloPiers
источник
4
Обязательно также chmod 0600 ~/.netrc.
пул
Просто хочу оставить ссылку здесь на man-страницу Ubuntu netrc . Мне нужно было создать его для другого пользователя (/home/git/.netrc), а затем сменить владельца на этого пользователя.
zacharydl
17

Для Windows вы можете использовать плагин Git Credential Manager (GCM). В настоящее время поддерживается Microsoft. Приятно то, что он сохраняет пароль в хранилище учетных данных Windows, а не в виде простого текста.

На странице релизов проекта есть установщик . Это также установит официальную версию Git для Windows со встроенным менеджером учетных данных. Это позволяет двухфакторной аутентификации для GitHub (и других серверов). И имеет графический интерфейс для первоначального входа в систему.

Для пользователей Cygwin (или пользователей, уже использующих официальный Git для Windows), вы можете предпочесть установку вручную. Загрузите пакет zip со страницы релизов . Распакуйте пакет и запустите install.cmdфайл. Это установит в вашу ~/binпапку. (Убедитесь, что ваш ~/binкаталог находится в вашем PATH.) Затем вы настраиваете его с помощью этой команды:

git config --global credential.helper manager

Git будет запускать git-credential-manager.exeпри аутентификации на любом сервере.

Надим Хедр
источник
3
Любой, кто вошел в вашу учетную запись, имеет легкий доступ к открытому тексту пароля. Все, что им нужно сделать, это отправить запрос диспетчеру учетных данных, например printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( подробнее здесь ). Вы должны всегда использовать личный токен доступа и, конечно, использовать 2FA в своей учетной записи GitHub.
CJS
13

Если вы не хотите хранить свой пароль в незашифрованном виде, как сказал Марк, вы можете использовать другой URL-адрес GitHub для извлечения, чем для отправки. В вашем конфигурационном файле под [remote "origin"]:

url = git://github.com/you/projectName.git
pushurl = git@github.com:you/projectName.git

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

MatrixFrog
источник
12

OAuth

Вы можете создать свой собственный персональный токен API ( OAuth ) и использовать его так же, как и обычные учетные данные (at:) /settings/tokens. Например:

git remote add fork https://4UTHT0KEN@github.com/foo/bar
git push fork

.netrc

Другой способ заключается в настройке вашего пользователя / пароля в ~/.netrc( _netrcв Windows), например

machine github.com
login USERNAME
password PASSWORD

Для HTTPS добавьте дополнительную строку:

protocol https

Помощник по учету

Чтобы кэшировать свой пароль GitHub в Git при использовании HTTPS, вы можете использовать помощник по учетным данным, чтобы Git запоминал имя пользователя и пароль GitHub при каждом обращении к GitHub.

  • Mac: git config --global credential.helper osxkeychain( osxkeychain helperобязательно),
  • Окна: git config --global credential.helper wincred
  • Linux и другие: git config --global credential.helper cache

Связанные с:

kenorb
источник
10

Вы можете использовать учетные данные помощников.

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

где xколичество секунд.

Чаран
источник
7
Это количество секунд ... Какой-то гений обновил его за миллисекунды, и все одобрили его без проверки. Пожалуйста, не вводите людей в заблуждение, если вы не знаете ответ. Спасибо!
Чаран
Вы можете дать ссылку на то место , где store, cacheи другие общие вещи , которые перечислены и объяснены?
Notinlist
3
Не хотите ли упомянуть тот факт, что это делает дерьмо дерьмом, если вы не вызываете другую конкретную команду, чтобы сначала использовать «кэш» в качестве менеджера? Этот материал настолько загадочный, все эти ответы неполны, и ни один из них не работает. Невероятно расстраивает. Смотрите вместо этого: stackoverflow.com/a/24800870/88409
Triynko
10

После того, как вы клонировали репозиторий repo, вы можете отредактировать repo/.git/configи добавить некоторые настройки, как показано ниже:

[user]
    name = you_name
    password = you_password
[credential]
    helper = store

Тогда вас не попросят usernameи passwordснова.

Сяоронг Ляо
источник
У меня работает с helper = manager(но меня просят имя пользователя + репо для первого нажатия).
Стефан Лоран
с помощником = менеджер Я получаю сообщение об ошибке
Kapil
К сожалению, git игнорирует пароль в файле конфигурации. .git_credentials с credential.store - единственный вариант.
Avamander
9

Я знаю, что это не безопасное решение, но иногда вам нужно просто простое решение - без установки чего-либо еще. И поскольку helper = store у меня не работает, я создал вспомогательный помощник:

Создайте сценарий и поместите его в папку bin вашего пользователя, здесь с именем credfake , этот сценарий предоставит ваше имя пользователя и ваш пароль:

#!/bin/bash
while read line
do
  echo "$line"
done < "/dev/stdin"
echo username=mahuser
echo password=MahSecret12345

сделать его исполняемым:

chmod u+x /home/mahuser/bin/credfake

затем настройте его в git:

git config --global credential.helper /home/mahuser/bin/credfake

(или используйте его без --global только для одного репо)

и - voilá - git будет использовать этот пользователь + пароль.

bebbo
источник
Согласен. Простое (если не надежное) решение действительно. +1, пока вы знаете, что делаете.
VonC
7

Вместо пароля учетной записи следует использовать токен аутентификации. Перейдите в настройки / приложения GitHub и создайте личный токен доступа. Токен можно использовать так же, как пароль.

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


Вместо токена или пароля, который предоставляет пользователю полный доступ к учетной записи GitHub, можно использовать специальный ключ развертывания проекта для предоставления доступа к одному репозиторию проекта. Проект Git можно настроить на использование этого другого ключа в следующих шагах, когда вы все еще можете получить доступ к другим учетным записям или проектам Git с обычными учетными данными:

  1. Написать файл SSH конфигурации , который содержит Host, IdentityFileдля ключа развертывания, может быть UserKnownHostsFile, и , возможно, User(хотя я думаю , что вам это не нужно).
  2. Написать сценарий оболочки оболочки SSH, который практически ssh -F /path/to/your/config $*
  3. Подготовьтесь GIT_SSH=/path/to/your/wrapperперед вашей обычной командой Git. Здесь git remote(источник) должен использовать git@github.com:user/project.gitформат.
Минхуа
источник
7

Для безопасности лучше использовать учетные данные, но вы можете хранить их некоторое время, используя кеш:

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

Ваши учетные данные будут сохранены в течение 3600 секунд.

Сарвар Нишонбоев
источник
Это значит, что через 3600 секунд мы должны снова ввести пароль ??? Как сохранить их навсегда?
HoangVu
$ git config credential.helper 'cache --timeout = 3600' ошибка: не удалось заблокировать файл конфигурации .git / config: нет такого файла или каталога
PlantationGator
Это сработало: git config --global credential.helper 'cache --timeout = 3600'
PlantationGator
@ Тама, я знаю, что прошло три года, но ты можешь просто пропустить, --timeoutи учетные данные будут храниться вечно.
Нил Чоудхури
Будет ли это работать внутри контейнера Docker (на основе windowsservercore)?
Питер Мортенсен
5

Ситуация немного отличается, если вы используете двухфакторную аутентификацию как и я. Поскольку я не нашел хорошего ответа в другом месте, я его воткну, чтобы, возможно, я смог найти его позже.

Если вы используете двухфакторную аутентификацию, то указание имени пользователя и пароля даже не будет работать - вам будет отказано в доступе. Но вы можете использовать токен доступа к приложению и использовать помощник по учетным данным Git для его кеширования. Вот соответствующие ссылки:

И я не помню, где я видел это, но когда вас спрашивают, какое у вас имя пользователя - вот где вы прикрепляете токен доступа к приложению. Затем оставьте пароль пустым. Это сработало на моем Mac.

JnBrymn
источник
при использовании двухсторонней аутентификации вы используете «токен доступа» в качестве пароля. имя пользователя остается прежним
Бен Ицхаки
4

Это работает для меня, я использую Windows 10

git config --global credential.helper wincred
Мостафа Навара
источник
4

Обычно у вас есть удаленный URL, что-то вроде этого,

git remote -v

origin    https://gitlab.com/username/Repo.git (fetch)
origin    https://gitlab.com/username/Repo.git (push)

Если вы хотите пропустить имя пользователя и пароль во время использования git push, попробуйте это:

 git remote set-url origin https://username:password@gitlab.com/username/Repo.git

Я только что добавил тот же URL (с данными пользователя, включая пароль) к источнику.

ПРИМЕЧАНИЕ. Не работает, если имя пользователя является идентификатором электронной почты.

git remote -v

origin    https://username:password@gitlab.com/username/Repo.git (fetch)
origin    https://username:password@gitlab.com/username/Repo.git (push)
Nayagam
источник
3

Я получил ответ от gitcredentials (7) Страница руководства . В моем случае в моей установке Windows нет кэша учетных данных; Я пользуюсь credential-store.

После использования хранилища учетных данных имя пользователя / пароль сохраняются в файле [папка пользователя] /. Git-credentials. Чтобы удалить имя пользователя / пароль, просто удалите содержимое файла.

Майк Лин
источник
2
Если в ваших окнах нет кэша учетных данных, я бы посоветовал использовать git config --global credential.helper wincredэтот магазин для хранения пароля постоянно.
Четабахана
2

В документации композитора упоминается, что вы можете запретить ему использовать API GitHub, чтобы он действовал следующим образом git clone:

Если вы установите no-apiключ в trueхранилище GitHub, он будет клонировать хранилище так же, как и в любом другом хранилище Git, вместо использования GitHub API. Но в отличие от gitнепосредственного использования драйвера, composer по-прежнему будет пытаться использовать zip-файлы GitHub.

Таким образом, раздел будет выглядеть так:

"repositories": [
    {
        "type": "vcs",
        "no-api": true,
        "url": "https://github.com/your/repo"
    }
],

Имейте в виду, что API существует по причине. Так что это должен быть последний метод в отношении увеличения нагрузки на github.com.

sebastianwagner
источник
Не уверен, что этот ответ имеет отношение к первоначальному вопросу.
Чарльз Опперманн
2

Вы также редактируете файл bashrc и добавляете в него скрипт.

Это будет запрашивать ваш пароль один раз при запуске Git, а затем запоминает его, пока вы не выйдете из системы.

SSH_ENV=$HOME/.ssh/environment
  
# Start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."

    # Spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}
  
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
   ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
      start_agent;
  }
else
    start_agent;
fi
ThePatelGuy
источник
0

Если вы используете osxkeychain токен с истекшим сроком действия и хотите обновить его, выполните следующие действия:

Запустите в терминале, затем нажмите Enter дважды.

git credential-osxkeychain erase
 host=github.com
 protocol=https

Теперь вам будет предложено ввести имя пользователя / пароль. Однако иногда кажется, что это не «берет», и вы должны продолжать входить снова.

Если это так, перезагрузите компьютер . Теперь, когда вы в следующий раз запустите команду git и введете свое имя пользователя / пароль, она будет сохранена.

Эндрю Шрайбер
источник