Я 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
: "Використання цього помічника зберігатиме ваші паролі незашифровані на диску, захищеному лише дозволами файлової системи."
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-poverljiv-cache або знайдіть помічника, який інтегрується з захищеним сховищем, наданим вашою операційною системою.
Використовуйте кеш-файл git, який за замовчуванням зберігає пароль протягом 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
. Вам також потрібно буде зберігати облікові дані у брелоку за допомогою програми Keychain.- Якщо ви використовуєте Windows, ви можете встановити помічник під назвою "Git Credential Manager for Windows". Це аналогічно помічнику "osxkeychain", описаному вище, але він використовує Windows Credential Store для контролю конфіденційної інформації. Його можна знайти за адресою 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-агента за допомогою команди нижче
ssh-add ~/.ssh/id_rsa
Крок 4 -
Тепер додайте віддалений URL-адресу git@github.com: user_name / repo_name.git до свого локального git repo за допомогою команди нижче.
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
- просто введіть для всіх підказок);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
(Натисніть Enter для всіх значень)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 також вимагатимуть ім’я користувача + пароль для операцій "pull and fetch". , тому для приватного сховища ви не хочете використовувати --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 для надсилання облікових даних через трубу. Хоча він надає файл povermental.helper, він зберігається у файловій системі або створює демон тощо. Часто облікові дані GIT є типовими на рівні системи, і на них потрібно захищати програми, викликаючи команди git. Дійсно, дуже небезпечно.
Ось над чим мені довелося працювати. 1. Версія Git (git --версія) повинна бути більше або дорівнює 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 як аргументи, а не той, який бере аргумент одного String.
GIT FETCH / PULL / PUSH