web-dev-qa-db-fra.com

Comment fournir un nom d'utilisateur et un mot de passe lors de l'exécution de "git clone [email protected]"?

Je sais comment fournir un nom d'utilisateur et un mot de passe à une requête HTTPS comme celle-ci:

git clone https://username:password@remote

Mais j'aimerais savoir comment fournir un nom d'utilisateur et un mot de passe à la télécommande comme ceci:

git clone [email protected]

J'ai essayé comme ça:

git clone username:password@[email protected]
git clone git@username:[email protected]
git clone [email protected]@username:password

Mais ils n'ont pas travaillé.

694
coordinate

Utilisation:

git clone https://username:[email protected]/username/repository.git

Cette méthode a fonctionné pour moi depuis un dépôt GitHub.

Basé sur le commentaire de Michael Scharf:

Vous pouvez omettre le mot de passe pour qu'il ne soit pas enregistré dans votre fichier historique Bash:

git clone https://[email protected]/username/repository.git

Il vous demandera votre mot de passe.

1078
Bassetassen

Le format _user@Host:path/to/repo_ indique à Git d'utiliser ssh pour se connecter à Host avec le nom d'utilisateur user. De git help clone :

Une autre syntaxe de type scp peut également être utilisée avec le protocole ssh:

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

La partie précédant le _@_ est le nom d'utilisateur et la méthode d'authentification (mot de passe, clé publique, etc.) est déterminée par ssh et non par Git. Git n'a aucun moyen de passer un mot de passe à SSH, car SSH pourrait même ne pas utiliser un mot de passe en fonction de la configuration du serveur distant.

Utilisez _ssh-agent_ pour éviter de taper des mots de passe tout le temps

Si vous ne voulez pas taper votre mot de passe ssh tout le temps, la solution typique est de générer une paire de clés publique/privée , mettez la clé publique dans votre _~/.ssh/authorized_keys_ fichier sur le serveur distant et chargez votre clé privée dans ssh-agent . Voir aussi Configuration de Git sur SSH pour se connecter une seule fois , page d'aide de GitHub sur les phrases secrètes de la clé ssh , documentation de gitolite ssh , et ssh de Heroku documentation des clés .

Choisir entre plusieurs comptes sur GitHub (ou Heroku ou ...)

Si vous avez plusieurs comptes à un endroit comme GitHub ou Heroku, vous aurez plusieurs clés SSH (au moins une par compte). Pour choisir le compte sur lequel vous souhaitez vous connecter, vous devez indiquer à ssh quelle clé privée utiliser .

Par exemple, supposons que vous ayez deux comptes GitHub: foo et bar. Votre clé ssh pour foo est _~/.ssh/foo_github_id_ et votre clé ssh pour bar est _~/.ssh/bar_github_id_. Vous souhaitez accéder à _[email protected]:foo/foo.git_ avec votre compte foo et à _[email protected]:bar/bar.git_ avec votre compte bar. Vous ajouteriez ce qui suit à votre _~/.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
_

Vous pouvez alors cloner les deux référentiels comme suit:

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

Éviter ssh complètement

Certains services offrent un accès HTTP comme alternative à ssh:

WARNING: Si vous ajoutez votre mot de passe à l'URL de clone, Git enregistrera votre mot de passe en texte brut dans _.git/config_. Pour stocker votre mot de passe en toute sécurité lorsque vous utilisez HTTP, utilisez un assistant d'identification. Par exemple:

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

En raison de ce qui précède, Git vous demandera votre mot de passe toutes les 15 minutes (par défaut). Voir git help credentials pour plus de détails.

182
Richard Hansen

Dans les commentaires de @ Bassetassen answer , @plosco a mentionné que vous pouvez utiliser au moins git clone https://<token>@github.com/username/repository.git pour cloner à partir de GitHub. Je pensais que j'allais préciser comment faire cela, au cas où quelqu'un trouverait cette réponse comme je l'ai fait en essayant d'automatiser un certain clonage.

GitHub a un guide très pratique sur la marche à suivre, mais il ne couvre pas la marche à suivre si vous souhaitez tout inclure sur une seule ligne à des fins d'automatisation. Il avertit que l'ajout du jeton à l'URL de clonage le stockera en texte brut dans .git/config. Ceci est évidemment un risque de sécurité pour presque tous les cas d'utilisation, mais puisque je prévois de supprimer le référentiel et de révoquer le jeton lorsque j'aurai terminé, je m'en fiche.

1. Créer un jeton

GitHub a un guide complet ici sur la façon d'obtenir un jeton, mais voici le TL; DR.

  1. Allez à Paramètres> Paramètres du développeur> Jetons d'accès personnel ( voici un lien direct )
  2. Cliquez sur "Générer un nouveau jeton" et entrez votre mot de passe à nouveau. (h est un autre lien direct )
  3. Définissez une description/un nom, vérifiez l’autorisation "repo" et cliquez sur le bouton "Générer un jeton" en bas de la page.
  4. Copiez votre nouveau jeton avant de quitter la page

2. Cloner le repo

Identique à la commande donnée par @plosco, git clone https://<token>@github.com/<username>/<repository>.git, il vous suffit de remplacer <token>, <username> et <repository> par vos informations personnelles.

Si vous voulez le cloner dans un dossier spécifique, insérez simplement l'adresse du dossier à la fin, comme suit: git clone https://<token>@github.com/<username>/<repository.git> <folder>, où <folder> est, vous l'avez deviné, le dossier vers lequel le cloner! Vous pouvez bien sûr utiliser ., .., ~, etc. ici comme vous pouvez le faire ailleurs.

3. Ne laisser aucune trace

Tout cela ne sera peut-être pas nécessaire, tout dépend de la sensibilité de votre travail.

  • Vous ne voulez probablement pas laisser ce jeton traîner si vous n'avez pas l'intention de l'utiliser pendant un certain temps, alors retournez à la page tokens et cliquez sur le bouton de suppression à côté de il.
  • Si vous n'avez plus besoin du repo, supprimez-le rm -rf <folder>.
  • Si vous avez besoin du repo à nouveau, mais n'avez pas besoin de l'automatiser à nouveau, vous pouvez supprimer la télécommande en exécutant git remote remove Origin ou simplement supprimer le jeton en exécutant git remote set-url Origin https://github.com/<username>/<repository.git>.
  • Effacez votre historique de bash pour vous assurer que le jeton ne reste pas connecté ici. Il y a plusieurs façons de faire cela, voir cette question et cette question . Cependant, il peut être plus facile de simplement ajouter toutes les commandes ci-dessus avec un espace afin d’empêcher leur stockage.

Notez que je ne suis pas un pro, ce qui précède peut ne pas être sécurisé dans le sens où aucune trace ne serait laissée pour un quelconque type de travail médico-légal.

24
Rob Rose

Bien qu'il existe de nombreuses réponses, je suis moi-même confronté à ce problème répété lorsque le nom d'utilisateur ou le mot de passe contient des caractères spéciaux.

URL encodez votre nom d'utilisateur et votre mot de passe pour git, puis utilisez-les dans le cadre de l'URL elle-même (en l'absence de problème de sécurité).

Dites, valeur du nom d'utilisateur encodée en URL

'utilisateur + 1' est l'utilisateur% 2B1

et valeur encodée du mot de passe par l'URL

'Welcome @ 1234' est Welcome% 401234

Ensuite, votre URL de clone GIT ressemblerait à ceci:

git clone https://user%2B1:Welcome%401234@actual-git-url-for-the-repo fonctionne parfaitement, alors que

git clone https: // utilisateur + 1: Bienvenue @ 1234 @ actual-git-url-pour-le-repo vous donne 403 erreurs

J'espère que cela t'aides.

Juste au cas où, voulez encoder URL en ligne: https://www.urlencoder.org/

8

J'ai résolu ce problème de la manière suivante:

enter image description here

6
BehrouzMoslem

Sous Windows , les étapes suivantes devraient re-déclencher la fenêtre de connexion GitHub lorsque git cloneing:

  • Rechercher dans le menu de démarrage pour "Credential Manager"
  • Sélectionnez "Informations d'identification Windows"
  • Supprimer toutes les informations d'identification liées à Git ou GitHub

result

5
Ore4444
git config --global core.askpass

Exécutez cette première avant de cloner de la même manière, devrait être corrigé!

2
Rohan