Comment fournir un nom d'utilisateur et un mot de passe lors de l'exécution "git clone git@remote.git"?

je sais comment fournir un nom d'utilisateur et un mot de passe à une requête https comme ceci:

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 git@remote.git

j'ai essayé comme ça:

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

mais ça n'a pas marché.

510
git
demandé sur Saurabh 2012-04-07 16:05:22

5 réponses

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

ce chemin a travaillé pour moi à partir d'un dépôt github

Modifier basé sur Michael_Scharf commentaire:

vous pouvez laisser le mot de passe pour qu'il ne soit pas enregistré dans votre fichier historique de bash:

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

Il vous demandera votre mot de passe

774
répondu Bassetassen 2015-04-28 18:48:34

le format user@host:path/to/repo indique à Git d'utiliser ssh pour se connecter à host avec le nom d'utilisateur user . À partir de git help clone :

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

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

la partie avant le @ est le nom d'utilisateur et la méthode d'authentification (mot de passe, clé publique, etc.) est déterminée par ssh, pas Git. Git n'a aucun moyen de passer un mot de passe à ssh, car ssh peut ne pas utiliser de mot de passe en fonction de la configuration du serveur distant.

utiliser 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 public / privé , mettre la clé publique dans votre ~/.ssh/authorized_keys fichier le serveur distant, et chargez votre clé privée dans ssh-agent . Voir aussi Configuration de Git sur SSH pour vous connecter une fois , de GitHub page d'aide sur clé ssh phrases de passe , gitolite ssh de documentation , et Heroku de clés ssh documentation .

le Choix entre plusieurs comptes sur GitHub (ou Heroku ou...)

si vous avez plusieurs comptes dans un endroit comme GitHub ou Heroku, vous aurez plusieurs clés ssh (au moins une par compte). Pour choisir le compte dans lequel vous voulez vous connecter, vous devez dire à 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 à git@github.com:foo/foo.git avec votre foo et git@github.com: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 clonez alors les deux dépôts 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

eviter SSH tout à fait

Certains services fournissent un accès HTTP, comme une alternative à ssh:

  • GitHub:

    https://username:password@github.com/username/repository.git
    
  • Gitorious:

    https://username:password@gitorious.org/project/repository.git
    
  • Heroku: Voir cet article de support .

avertissement : en ajoutant votre mot de passe à L'URL du clone, Git stockera votre mot de passe en clair dans .git/config . Pour stocker votre mot de passe en toute sécurité lorsque vous utilisez HTTP, utilisez un helper de justificatifs D'identité. 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

ce qui précède obligera Git à demander votre mot de passe une fois toutes les 15 minutes (par défaut). Voir git help credentials pour plus de détails.

160
répondu Richard Hansen 2017-05-23 12:26:35

dans les commentaires de la réponse de @Bassetassen 1519160920" , @plosco a mentionné que vous pouvez utiliser git clone https://<token>@github.com/username/repository.git pour cloner à partir de GitHub au minimum. J'ai pensé que je voudrais développer sur la façon de faire cela, au cas où quelqu'un tombe sur cette réponse comme je l'ai fait en essayant d'automatiser un certain Clonage.

GitHub a un très pratique guide sur la façon de faire cela, mais il ne couvre pas ce qu'il faut faire si vous voulez inclure tout dans une ligne pour des fins d'automatisation. Il avertit que ajouter le jeton à L'URL du clone le stockera en clair dans .git/config . C'est évidemment un risque de sécurité pour presque tous les cas d'utilisation, mais puisque je prévois de supprimer la mise à jour et de révoquer le jeton quand j'ai fini, je m'en fiche.

1. Créer un Token

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

  1. Aller à Paramètres > Paramètres de Développeur > Personnels des Jetons d'Accès ( voici un lien direct )
  2. cliquez sur" Générer un nouveau Token " et entrez votre mot de passe à nouveau. (h here's another direct link )
  3. définissez une description/un nom, vérifiez la permission" repo "et appuyez sur le bouton" Generate token " au bas de la page.
  4. Copy votre nouveau jeton avant de quitter la page

2. Cloner la pension

comme la commande que @plosco a donnée, git clone https://<token>@github.com/<username>/<repository>.git , il suffit de remplacer <token> , <username> et <repository> par quelque soit votre info.

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

3. Sans Laisser De Trace

tout cela peut ne pas être nécessaire, selon la sensibilité de ce que vous faites.

  • vous ne voulez probablement pas laisser ce jeton traîner autour si vous n'avez pas l'intention de l'utiliser pendant un certain temps, alors retournez à la tokens page et appuyez sur le bouton supprimer à côté d'elle.
  • si vous n'avez plus besoin de la pension, supprimez-la rm -rf <folder> .
  • si vous avez encore besoin de la mise à jour, mais n'avez pas besoin de l'automatiser à nouveau, vous pouvez supprimer la télécommande en faisant git remote remove origin ou simplement supprimer le token en exécutant git remote set-url origin https://github.com/<username>/<repository.git> .
  • effacer votre historique de bash pour s'assurer que le token ne reste pas connecté. Il y a plusieurs façons de le faire, voir cette question et cette question . Toutefois, il peut être plus facile de les préfixer toutes les commandes ci-dessus avec un espace pour les empêcher d'être stockée pour commencer.

notez que je ne suis pas un pro, donc ce qui précède peut ne pas être sûr dans le sens où aucune trace ne serait laissée pour toute sorte de travail médico-légal.

6
répondu Rob Rose 2018-05-05 18:56:40

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

enter image description here

4
répondu BehrouzMoslem 2018-07-02 10:37:36
git config --global core.askpass

lancer cette première avant le clonage de la même façon, doit être corrigé!

1
répondu Rohan 2018-09-05 08:32:31