Як вказати ім'я користувача та пароль під час запуску "git clone git@remote.git"?


844

Я знаю, як вказати ім’я користувача та пароль для запиту HTTPS на зразок цього:

git clone https://username:password@remote

Але я хотів би знати, як вказати ім’я користувача та пароль для віддаленого пристрою так:

git clone git@remote.git

Я спробував так:

git clone username:password@git@remote.git
git clone git@username:password@remote.git
git clone git@remote.git@username:password

Але вони не працювали.


4
Ви не можете. "Git" перед "@" - це вже ім'я користувача. Звідки ви взяли URL-адресу сховища (git@remote.get)? Звідки ви взяли думку про те, що вам потрібно вказати інше ім’я користувача та пароль?
Кен Томас

3
Моя репо-адреса - від heroku "git@heroku.com: zxy-helloworld.git". І я використовую оболонку emacs для клонування та натискання. Якщо оболонка запитає пароль, emacs буде висіти. Це відома проблема з emacs у Windows: gnu.org/software/emacs/windows/…
координувати

Що робити, якщо ім’я користувача - це електронний лист? як ти це вводиш? myemail @ gmail.com @ example.com ?
Kyon Perez

Відповіді:


1316

На основі коментаря Майкла Шарфа:

Ви можете залишити пароль, щоб він не входив у ваш файл історії Bash:

git clone https://username@github.com/username/repository.git

Він запропонує ввести пароль.

Ви також можете використовувати:

git clone https://username:password@github.com/username/repository.git

Цей спосіб працював для мене зі сховища GitHub.


5
це до речі не повинно бути однаковим. Якщо ваш колега створив git repo, а ви входите в систему як інший обліковий запис, вони не будуть однаковими.
holgac

48
Не бажано вводити пароль у URL-адресі цього файлу, який зберігається на .git / config.
Небезпечно,

55
@MrDuk немає проблем, уникай цього (як% 40 iirc).
Бенджамін Груенбаум

57
Ви можете залишити пароль: git clone https://username@github.com/username/repository.git. git попросить вас, і він не буде збережений ні в .git / config, ні в вашій історії башів
Michael_Scharf

36
ви також можете ввести "пробіл" на початку рядка, щоб linux не зберігав команду в історії
Nicolas Zozol

212

user@host:path/to/repoФормат говорить Git для використання SSH , щоб увійти в систему hostз ім'ям користувача user. Від git help clone:

Альтернативний scp-подібний синтаксис також може бути використаний з протоколом ssh:

[user@]host.xz:path/to/repo.git/

Частина перед @іменем користувача є, а спосіб аутентифікації (пароль, відкритий ключ тощо) визначається ssh, а не Git. У Git немає можливості передати пароль до ssh, оскільки ssh може навіть не використовувати пароль залежно від конфігурації віддаленого сервера.

Використовуйте, ssh-agentщоб не вводити паролі постійно

Якщо ви не хочете весь час вводити свій ssh-пароль, типовим рішенням є створення пари відкритих / приватних ключів , помістіть відкритий ключ у свій ~/.ssh/authorized_keysфайл на віддаленому сервері та завантажте свій приватний ключ ssh-agent. Також дивіться Налаштування Git через SSH для входу раз , сторінка довідки GitHub за ключовими SSH фразах , документації SSH gitolite в і документації ключів SSH Heroku в .

Вибір між декількома обліковими записами на GitHub (або Heroku чи ...)

Якщо у вас є кілька облікових записів у такому місці, як GitHub або Heroku, у вас буде кілька ключів ssh (принаймні один на акаунт). Щоб вибрати, в якому обліковому записі ви хочете ввійти, потрібно сказати ssh, яким приватним ключем користуватися .

Наприклад, припустимо, у вас було два облікові записи GitHub: fooі bar. Ваш ключ ssh для fooє, ~/.ssh/foo_github_idа ваш ssh ключ для barє ~/.ssh/bar_github_id. Ви хочете отримати доступ git@github.com:foo/foo.gitзі своїм fooрахунком та git@github.com:bar/bar.gitсвоїм barобліковим записом. Ви додасте до свого ~/.ssh/config:

Host gh-foo
    Hostname github.com
    User git
    IdentityFile ~/.ssh/foo_github_id
Host gh-bar
    Hostname github.com
    User git
    IdentityFile ~/.ssh/bar_github_id

Потім ви будете клонувати два сховища наступним чином:

git clone gh-foo:foo/foo.git  # logs in with account foo
git clone gh-bar:bar/bar.git  # logs in with account bar

Уникнути ssh взагалі

Деякі сервіси надають доступ до HTTP як альтернативу ssh:

  • GitHub:

    https://username:password@github.com/username/repository.git
    
  • Героїчні:

    https://username:password@gitorious.org/project/repository.git
    
  • Heroku: Дивіться цю статтю підтримки .

ПОПЕРЕДЖЕННЯ . Якщо додавання пароля до URL-адреси клону, Git зберігатиме ваш пароль у простому тексті .git/config. Щоб надійно зберігати свій пароль під час використання HTTP, використовуйте довідку з облікових даних. Наприклад:

git config --global credential.helper cache
git config --global credential.https://github.com.username foo
git clone https://github.com/foo/repository.git

Вищезазначене призведе до того, що Git запитує ваш пароль раз на 15 хвилин (за замовчуванням). Детальніше git help credentialsдивіться.


Це найкраще пояснення того, як git працює з SSH. Я розумію, що коли ви вказуєте git@githost.com: path / to / repo.git, він фактично повідомляє git, що користувач git сам і що він повинен перейти захопити ваші облікові дані (відкритий ключ) з ssh-агента для Ведучий "githost.com".
Анаель

39

У коментарях @ Bassetassen в відповідь , @plosco зазначив , що ви можете використовуватиgit clone https://<token>@github.com/username/repository.git , щоб клонувати з GitHub , по крайней мере. Я думав, що розширюся, як це зробити, на випадок, якщо хтось натрапить на цю відповідь, як я, намагаючись автоматизувати клонування.

У GitHub є дуже зручний посібник, як це зробити, але він не охоплює, що робити, якщо ви хочете включити все це в один рядок для цілей автоматизації. Він попереджає, що додавання маркера до URL-адреси клонування збереже його в простому тексті в .git/config . Очевидно, це ризик для безпеки майже для кожного випадку використання, але оскільки я планую видалити репо і відкликати маркер, коли я закінчу, мені все одно.

1. Створіть маркер

У GitHub тут є цілий посібник про те, як отримати маркер, але ось TL; DR.

  1. Перейдіть у Налаштування> Налаштування розробника> Токени особистого доступу ( ось пряме посилання )
  2. Клацніть «Створити новий маркер» та введіть свій пароль ще раз. ( ще одне пряме посилання )
  3. Встановіть опис / назву для нього, перевірте дозвіл "repo" і натисніть кнопку "Створити маркер" внизу сторінки.
  4. Скопіюйте новий маркер перед тим, як залишити сторінку

2. Клонувати репо

Те ж, що команда @plosco дав, git clone https://<token>@github.com/<username>/<repository>.gitпросто замінити <token>, <username>і <repository>з тим, що ваша інформація знаходиться.

Якщо ви хочете клонувати його до певної папки, просто вставте адресу папки наприкінці так: git clone https://<token>@github.com/<username>/<repository.git> <folder>де <folder>це ви здогадалися, папку, щоб її клонувати! Ви, звичайно ., можете використовувати ..,~ і т.д. тут , як ви можете в іншому місці.

3. Не залишайте слідів

Не все це може знадобитися, залежно від того, наскільки ви чутливі до того, що ви робите.

  • Ви, мабуть, не хочете залишати цей маркер звисаючим, якщо ви не маєте наміру користуватися ним деякий час, тому поверніться на сторінку жетонів і натисніть кнопку видалення поруч.
  • Якщо репо репортаж вам більше не потрібен, видаліть його rm -rf <folder> .
  • Якщо вам потрібно знову зробити репо, але вам не потрібно автоматизувати його знову, ви можете видалити пульт, виконавши git remote remove originабо просто видалити маркер, запустившиgit remote set-url origin https://github.com/<username>/<repository.git> .
  • Очистіть історію баш-програм, щоб маркер не залишався в ньому. Є багато способів зробити це, дивіться це питання і це питання . Однак може бути простіше просто передати всі вищезазначені команди пробілом, щоб не допустити їх зберігання.

Зауважте, що я не професіонал, тому вищезгадане може не бути надійним у тому сенсі, що жодних слідів не залишилося б для будь-якої криміналістичної роботи.


1
https://<token>@github.comне був прийнятий з моїм порталом, я повинен був використовуватиhttps://oauth2:<token>@github.com
MushyPeas

25

Хоча відповідей багато, я стикаюся з неодноразовою проблемою, коли ім’я користувача або пароль в ньому є спеціальні символи.

URL-адреса кодує ваше ім'я користувача та пароль для git, а потім використовуйте їх як частину самої URL-адреси (коли немає проблем із безпекою).

Скажімо, значення коду, ім'я користувача, кодоване URL-адресом

'user + 1' - це користувач% 2B1

і значення коду, що кодується URL-адресою

"Ласкаво просимо @ 1234", вітаємо% 401234

Тоді ваша URL-адреса клонування GIT виглядатиме так:

git clone https://user%2B1:Welcome%401234@actual-git-url-for-the-repo працює чудово, тоді як,

git clone https: // user + 1: Ласкаво просимо @ 1234 @ фактично-git-url-for-the repo 403 помилки

Сподіваюсь, це допомагає.

На всякий випадок, захочете кодувати URL-адресу в Інтернеті: https://www.urlencoder.org/


13

Я вирішив цю проблему наступним чином:

введіть тут опис зображення


11
ніколи не гарна ідея вводити свій пароль в командному рядку. Чи знаєте ви, що ваша система може зберігати історію командного рядка у файлі? (Наприклад: у Linux є прихований файл під назвою .bash_history)
серпень

Правильно. Щоразу, коли я це роблю, чи щось подібне, що часом може бути дуже зручно, я завжди видаляю команду, яку я використовував, з історії (історія -d).
Франческо Маршетті-Штазі

4
@ FrancescoMarchetti-Stasi вам не потрібно видаляти команду, просто використовуйте пробіл на початку команди, і він ніколи не зберігатиметься в історії.
Іштіяк Хусейн

Так - я дізнався це лише пару місяців тому, після майже 30 років роботи в системах Unix ... сором мені :)
Франческо Маршетті-Штазі

9

У Windows наступні кроки повинні повторно запустити вікно входу в GitHub під час користування git clone:

  • Меню запуску пошуку для "Менеджера довірених даних"
  • Виберіть "Повноважні дані Windows"
  • Видаліть усі облікові дані, пов’язані з Git або GitHub

результат


7

Виконайте ці аргументи, щоб замінити ур особливі випадки, якщо вони створюють проблему:

! # $ & '() * +, /:; =? @ []

% 21% 23% 24% 26% 27% 28% 29% 2A% 2B% 2C% 2F% 3A% 3B% 3D% 3F% 40% 5B% 5D

Наприклад,

фактична URL-адреса: https: // usern @ me: p @ ssword @ git / reponame.git

URL-адреса рішення, яку слід використовувати: https: // usern% 40me: p%40ssword@git/reponame.git


5
git config --global core.askpass

Виконати це перше, перш ніж клонувати так само, слід виправити!


3
Спробував цього, все ще не вимагає.
Maarten Kieft

Налаштування глобальної конфігурації ніколи не є хорошою ідеєю, оскільки це може зіпсувати інші клони.
Мартін

1

Це відмінне запитання щодо переповнення стека, і відповіді були дуже повчальними, що мені вдалося вирішити набридливу проблему, з якою я стикався недавно.

Організація, над якою я працюю, використовує Atlassian's BitBucketпродукт (а не Github), по суті їх версію GitHub, щоб сховища можна було повністю забезпечити за умови. Я зіткнувся з подібною проблемою, як @coordinate, оскільки мій пароль був потрібний для нового сховища, яке я перевірив. Мої дані були збережені в усьому світіBitBucket проектів, тому я не впевнений, що призвело до втрати облікових даних.

Коротше кажучи, мені вдалося ввести наступну команду GIT (надаючи лише моє ім’я користувача), що потім спонукало менеджера довірок Git запропонувати мені пароль, який я тоді зміг зберегти.

git clone https://user@code.domain.org/git/[organization]/[team]/[repository.git]

ПРИМІТКА. Підпрограмні файли у скопленому тексті просто посилаються на внутрішні посилання та залежать від вас!


0

Якщо ви використовуєте, http/httpsі ви хочете повністю АВТОМАТИЗИРУВАТИ процес, не вимагаючи взагалі жодного вводу користувача або запиту користувача (наприклад: всередині конвеєра CI / CD), ви можете використовувати наступний підхідgit credential.helper

GIT_CREDS_PATH="/my/random/path/to/a/git/creds/file"
# Or you may choose to not specify GIT_CREDS_PATH at all.
# See https://git-scm.com/docs/git-credential-store#FILES for the defaults used

git config --global credential.helper "store --file ${GIT_CREDS_PATH}"
echo "https://alice:${ALICE_GITHUB_PASSWORD}@github.com" > ${GIT_CREDS_PATH}

де ви можете встановити ALICE_GITHUB_PASSWORDзмінну середовища з попередньої команди оболонки або з конфігурації конвеєра тощо.

Пам'ятайте, що "зберігати" на основі git-poveritive-helper зберігає паролі та значення в простому тексті. Тому переконайтеся, що ваш маркер / пароль мають дуже обмежені дозволи.


Тепер просто використовуйте https: //alice@github.com/my_repo.git там, де ваша автоматизована система потребує отримання репо - вона використовуватиме облікові дані aliceв github.comмагазині, створеними помічником git-poveritive.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.