Я git push
работаю в удаленном хранилище Git.
Каждый push
подскажет мне для вводаusername
и password
. Я хотел бы избежать этого для каждого толчка, но как настроить, чтобы избежать этого?
Я git push
работаю в удаленном хранилище Git.
Каждый push
подскажет мне для вводаusername
и password
. Я хотел бы избежать этого для каждого толчка, но как настроить, чтобы избежать этого?
Ответы:
Откройте терминал для создания ключей SSH:
cd ~ #Your home directory
ssh-keygen -t rsa #Press enter for all values
(Работает только в том случае, если программа коммитов может использовать сертификаты / закрытые и открытые ключи ssh)
Вот прохождение по генерации замазки для вышеуказанных шагов
Этот шаг варьируется в зависимости от того, как настроен ваш пульт.
Если это репозиторий GitHub и у вас есть права администратора, перейдите в настройки и нажмите «добавить ключ SSH». Скопируйте содержимое ~/.ssh/id_rsa.pub
в поле с надписью «Ключ».
Если ваш репозиторий администрируется кем-то другим, предоставьте администратору свой id_rsa.pub
.
Если ваш удаленный репозиторий управляется вами, вы можете использовать эту команду, например:
scp ~/.ssh/id_rsa.pub YOUR_USER@YOUR_IP:~/.ssh/authorized_keys/id_rsa.pub
Если вы выполнили действия, описанные выше, и по-прежнему получаете запрос на ввод пароля, убедитесь, что URL вашего репо находится в форме
git+ssh://git@github.com/username/reponame.git
в отличие от
https://github.com/username/reponame.git
Чтобы увидеть URL репо, запустите:
git remote show origin
Вы можете изменить URL с помощью:
git remote set-url origin git+ssh://git@github.com/username/reponame.git
[1] Этот раздел включает в себя ответ Эрика П
git remote set-url origin git@github.com:/username/projectname.git
Выполните следующую команду, чтобы включить кэширование учетных данных.
$ git config credential.helper store
$ git push https://github.com/repo.git
Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>
Использование также должно указывать срок действия кэширования ,
git config --global credential.helper 'cache --timeout 7200'
После включения кэширования учетных данных оно будет кэшироваться в течение 7200 секунд (2 часа) .
Примечание. Помощник по учету хранит незашифрованный пароль на локальном диске.
git
man-страницы: «Использование этого помощника сохранит ваши пароли в незашифрованном виде на диске, защищенные только разрешениями файловой системы».
store
помощник по учетным данным хранит пароль на диске в незашифрованном виде.
git config --unset credential.helper
Если у вас уже настроены ключи SSH и вы все еще получаете запрос пароля, убедитесь, что URL-адрес вашего репо находится в форме
git+ssh://git@github.com/username/reponame.git
в отличие от
https://github.com/username/reponame.git
Чтобы увидеть URL репо, запустите:
git remote show origin
Вы можете изменить URL git remote set-url
следующим образом:
git remote set-url origin git+ssh://git@github.com/username/reponame.git
git init
локально, а затем попытался нажать после добавления пульта из нового репозитория на веб-сайте GitHub.
git@github.com/username/reponame.git
Просто используйте --repo
опцию для команды git push. Как это:
$ git push --repo https://name:password@bitbucket.org/name/repo.git
git remote set-url origin https://name:password@github.com/repo.git
name@github.com/....git
тоже просто работает, если вы не возражаете против того, чтобы каждый раз придираться к паролю.
git push --repo https://github.com/Username/repo
он работает без .git
расширения
Вы можете использовать git-credential-store через
git config credential.helper store
который хранит ваш пароль в файловой системе в незашифрованном виде :
Использование этого помощника будет хранить ваши пароли в незашифрованном виде на диске, защищенные только разрешениями файловой системы. Если это неприемлемый компромисс в отношении безопасности, попробуйте git-credential-cache или найдите помощника, который интегрируется с безопасным хранилищем, предоставляемым вашей операционной системой.
Используйте git-credential-cache, который по умолчанию хранит пароль в течение 15 минут.
git config credential.helper cache
чтобы установить другое время ожидания, используйте --timeout
(здесь 5 минут)
git config credential.helper 'cache --timeout=300'
- Если вы используете Mac, Git поставляется с режимом «osxkeychain» , который кэширует учетные данные в безопасной цепочке для ключей, привязанной к вашей системной учетной записи. Этот метод сохраняет учетные данные на диске, и срок их действия не истекает, но они шифруются той же системой, в которой хранятся сертификаты HTTPS и автозаполнения Safari. Запуск в командной строке будет включить эту функцию:
git config --global credential.helper osxkeychain
. Вам нужно будет сохранить учетные данные в связке ключей, также используя приложение связки ключей.- Если вы используете Windows, вы можете установить помощника под названием «Git Credential Manager для Windows». Это похоже на описанный выше помощник «osxkeychain», но использует хранилище учетных данных Windows для управления конфиденциальной информацией. Его можно найти по адресу https://github.com/Microsoft/Git-Credential-Manager-for-Windows . [подчеркивает мой]
credential.helper cache
не работает. Так и должно быть git config --global credential.helper wincred
.
Шаг 1 -
Создайте ключи SSH в вашей системе Linux, используя команду ниже
ssh-keygen -t rsa -b 4096 -C "your_email"
Будет запрошена фраза-пароль и имя файла (по умолчанию будет ~ / .ssh / id_rsa, ~ / .ssh / id_rsa.pub)
Шаг 2 -
После того, как файлы созданы, добавьте открытый ключ id_rsa.pub в раздел ssh учетной записи github.
Шаг 3 -
На вашем компьютере добавьте закрытый ключ id_rsa в ssh-agent с помощью команды ниже
ssh-add ~/.ssh/id_rsa
Шаг 4 -
Теперь добавьте удаленный URL-адрес git@github.com: user_name / repo_name.git в локальное git-репо, используя следующую команду.
git remote remove origin
git remote add origin git@github.com:user_name/repo_name.git
Это оно.
Подключите ваш git-клиент к хранилищу учетных данных вашей ОС. Например, в Windows вы привязываете помощника по учетным данным к wincred:
git config --global credential.helper wincred
Есть ли способ пропустить ввод пароля при использовании https: // на GitHub?
В операционной системе Windows используйте это вместо этого, это работает для меня:
https://{Username}:{Password}@github.com/{Username}/{repo}.git
например
git clone https://{Username}:{Password}@github.com/{Username}/{repo}.git
git pull https://{Username}:{Password}@github.com/{Username}/{repo}.git
git remote add origin https://{Username}:{Password}@github.com/{Username}/{repo}.git
git push origin master
Просто хотел бы отметить кое-что о решении, сказанном выше несколько раз:
git config credential.helper store
После этого вы можете использовать любую команду, для которой требуется пароль. Тебе не нужно давить. (Вы также можете вытащить, например). После этого вам не нужно будет снова вводить имя пользователя / пароль.
Насколько я знаю, есть просто два безопасных способа: ssh или passwd, зашифрованные с использованием хранилища ключей .
cat ~/.ssh/id_rsa.pub
вставьте его туда, назовите и сохраните его (если у вас нет такого файла, сгенерируйте его для себя ssh-keygen -t rsa
- просто введите Enter для всех запросов);git remote set-url origin git+ssh://git@github.com/username/reponame.git
- вы можете проверить его сначала git remote -v
);touch t; git add t; git commit -m "test"; git push
и подтвердите «да», чтобы насладиться миром без пароля .Если вы просто используете, git config --global credential.helper store
как уже упоминалось, ваши незашифрованные пароли будут просто храниться в виде простого текста, под ~/.git-credentials
которым небезопасно, как кажется.
Попробуйте зашифровать его как
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
git config --global credential.helper store
В этом случае вы используете
https://git@github.com/username/reponame.git
.
Мое решение для Windows:
ssh-keygen -t rsa
(Нажмите ввод для всех значений)Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
Если ваш компьютер защищен или вы не заботитесь о безопасности пароля, это можно сделать очень просто. Предполагая, что удаленный репозиторий находится на GitHub и origin
является вашим локальным именем для удаленного репозитория, используйте эту команду
git remote set-url --push origin https://<username>:<password>@github.com/<repo>
Этот --push
флаг обеспечивает изменение URL-адреса хранилища только для git push
команды. (Вопрос, заданный в оригинальном посте, касается git push
только команды. Требование ввода имени пользователя и пароля только для операций push - это обычная настройка для общедоступных репозиториев на GitHub. Обратите внимание, что для частных репозиториев на GitHub также потребуется имя пользователя + пароль для операций извлечения и извлечения. так что для частного репозитория вы бы не хотели использовать --push flag
...)
ВНИМАНИЕ: это по своей природе небезопасно, потому что:
ваш интернет-провайдер или любой, кто регистрирует ваши обращения к сети, может легко увидеть пароль в виде обычного текста в URL;
любой, кто получит доступ к вашему ПК, сможет просмотреть ваш пароль с помощью git remote show origin
.
Вот почему использование ключа SSH является приемлемым ответом.
Даже ключ SSH не является полностью безопасным . Любой, кто получает доступ к вашему ПК, может, например, сделать толчки, которые разрушают ваш репозиторий, или, что еще хуже, подтолкнуть коммиты, внося тонкие изменения в ваш код. (Все заданные коммиты явно хорошо видны на GitHub. Но если кто-то захочет тайно изменить ваш код, он может--amend
выполнить предыдущий коммит, не изменяя сообщение фиксации, а затем принудительно протолкнуть его. Это было бы незаметно и довольно трудно заметить на практике. )
Но раскрытие вашего пароля хуже . Если злоумышленник узнает ваше имя пользователя и пароль, он может заблокировать вашу учетную запись, удалить учетную запись, окончательно удалить хранилище и т. Д.
В качестве альтернативы - для простоты и безопасности - вы можете указать только свое имя пользователя в URL, так что вам придется каждый раз вводить пароль, git push
но вам не нужно будет каждый раз указывать свое имя пользователя. (Мне очень нравится этот подход, необходимость вводить пароль дает мне паузу, чтобы думать каждый раз git push
, когда я , поэтому я не могу git push
случайно.)
git remote set-url --push origin https://<username>@github.com/<repo>
@
, это нарушает командный пароль после @ как часть сервера git?
Все это возникает потому, что git не предоставляет опцию в командах clone / pull / push / fetch для отправки учетных данных через канал. Хотя он предоставляет credential.helper, он хранится в файловой системе или создает демон и т. Д. Часто учетные данные GIT относятся к системному уровню и ответственность за их безопасность лежит на приложении, вызывающем команды git. Очень небезопасно.
Вот что я должен был обойти. 1. Версия Git (git --version) должна быть больше или равна 1.8.3.
GIT CLONE
Для клонирования используйте «git clone URL» после изменения URL-адреса из формата: http: // {myuser} @ {my_repo_ip_address} / {myrepo_name.git} на http: // {myuser}: {mypwd} @ {my_repo_ip_address} /{myrepo_name.git}
Затем очистите хранилище пароля, как в следующем разделе.
продувка
Теперь это пошло бы и
Если ваше приложение использует Java для выдачи этих команд, используйте ProcessBuilder вместо Runtime. Если вы должны использовать Runtime, используйте getRunTime (). Exec, который принимает массив String в качестве аргументов с аргументами / bin / bash и -c, а не тот, который принимает в качестве аргумента одну строку.
GIT FETCH / PULL / PUSH