Je git push
travaille sur un référentiel Git distant.
Tout push
me demandera de saisir username
et password
. Je voudrais l'éviter à chaque push, mais comment configurer pour l'éviter?
Je git push
travaille sur un référentiel Git distant.
Tout push
me demandera de saisir username
et password
. Je voudrais l'éviter à chaque push, mais comment configurer pour l'éviter?
Réponses:
Ouvrez le terminal pour créer des clés ssh:
cd ~ #Your home directory
ssh-keygen -t rsa #Press enter for all values
(Fonctionne uniquement si le programme de validation est capable d'utiliser des certificats / clés ssh privées et publiques)
Voici une procédure pas à pas sur la génération de mastic pour les étapes ci-dessus
Cette étape varie en fonction de la configuration de votre télécommande.
S'il s'agit d'un référentiel GitHub et que vous disposez de privilèges administratifs, accédez aux paramètres et cliquez sur 'ajouter une clé SSH'. Copiez le contenu de votre ~/.ssh/id_rsa.pub
dans le champ intitulé «Clé».
Si votre référentiel est administré par quelqu'un d'autre, donnez-en votre administrateur id_rsa.pub
.
Si votre référentiel distant est administré par votre, vous pouvez utiliser cette commande par exemple:
scp ~/.ssh/id_rsa.pub YOUR_USER@YOUR_IP:~/.ssh/authorized_keys/id_rsa.pub
Si vous avez effectué les étapes ci-dessus et obtenez toujours l'invite de mot de passe, assurez-vous que l'URL de votre référentiel est dans le formulaire
git+ssh://git@github.com/username/reponame.git
par opposition à
https://github.com/username/reponame.git
Pour voir votre URL de dépôt, exécutez:
git remote show origin
Vous pouvez modifier l'URL avec:
git remote set-url origin git+ssh://git@github.com/username/reponame.git
[1] Cette section reprend la réponse d' Eric P
git remote set-url origin git@github.com:/username/projectname.git
Exécutez la commande suivante pour activer la mise en cache des informations d'identification.
$ 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>
L'utilisation doit également spécifier l' expiration de la mise en cache ,
git config --global credential.helper 'cache --timeout 7200'
Après avoir activé la mise en cache des informations d'identification, il sera mis en cache pendant 7200 secondes (2 heures) .
Remarque: assistant d'identification stockant le mot de passe non chiffré sur le disque local.
git
page de manuel: "L'utilisation de cette aide stockera vos mots de passe non chiffrés sur le disque, protégés uniquement par les autorisations du système de fichiers."
store
assistant d’identification stockant le mot de passe sur le disque non chiffré.
git config --unset credential.helper
Si vous avez déjà configuré vos clés SSH et que vous recevez toujours l'invite de mot de passe, assurez-vous que l'URL de votre dépôt est au format
git+ssh://git@github.com/username/reponame.git
par opposition à
https://github.com/username/reponame.git
Pour voir votre URL de dépôt, exécutez:
git remote show origin
Vous pouvez changer l'URL git remote set-url
comme ceci:
git remote set-url origin git+ssh://git@github.com/username/reponame.git
git init
localement, puis j'ai essayé de pousser après avoir ajouté la télécommande à partir d'un nouveau dépôt sur le site Web de GitHub.
git@github.com/username/reponame.git
Utilisez simplement l' --repo
option pour la commande git push. Comme ça:
$ 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
fonctionne que si cela ne vous dérange pas d'être harcelé pour le mot de passe à chaque fois.
git push --repo https://github.com/Username/repo
cela fonctionne sans l' .git
extension
Vous pouvez utiliser le git-credential-store via
git config credential.helper store
qui stocke votre mot de passe non crypté dans le système de fichiers :
L'utilisation de cet assistant stockera vos mots de passe non chiffrés sur le disque, protégés uniquement par les autorisations du système de fichiers. Si ce n'est pas un compromis de sécurité acceptable, essayez git-credential-cache ou trouvez un assistant qui s'intègre au stockage sécurisé fourni par votre système d'exploitation.
Utilisez le git-credential-cache qui stocke par défaut le mot de passe pendant 15 minutes.
git config credential.helper cache
pour définir un délai différent, utilisez --timeout
(ici 5 minutes)
git config credential.helper 'cache --timeout=300'
- Si vous utilisez un Mac, Git est livré avec un mode «osxkeychain» , qui met en cache les informations d'identification dans le trousseau sécurisé attaché à votre compte système. Cette méthode stocke les informations d'identification sur le disque, et elles n'expirent jamais, mais elles sont cryptées avec le même système qui stocke les certificats HTTPS et les remplissages automatiques de Safari. Exécution de ce qui suit sur la ligne de commande activer cette fonction:
git config --global credential.helper osxkeychain
. Vous devrez également stocker les informations d'identification dans le trousseau à l'aide de l'application Trousseau.- Si vous utilisez Windows, vous pouvez installer un assistant appelé «Git Credential Manager for Windows». Ceci est similaire à l'assistant «osxkeychain» décrit ci-dessus, mais utilise le Windows Credential Store pour contrôler les informations sensibles. Il peut être trouvé à https://github.com/Microsoft/Git-Credential-Manager-for-Windows . [met l'accent sur le mien]
credential.helper cache
ne fonctionne PAS. Ça devrait l'être git config --global credential.helper wincred
.
Étape 1 -
Créez des clés SSH sur votre système Linux en utilisant la commande ci-dessous
ssh-keygen -t rsa -b 4096 -C "your_email"
Il vous demandera la phrase secrète et le nom du fichier (par défaut sera ~ / .ssh / id_rsa, ~ / .ssh / id_rsa.pub)
Étape 2 -
Une fois les fichiers créés, ajoutez la clé publique id_rsa.pub à la section ssh du compte github.
Étape 3 -
Sur votre machine, ajoutez la clé privée id_rsa à ssh-agent à l'aide de la commande ci-dessous
ssh-add ~/.ssh/id_rsa
Étape 4 -
Ajoutez maintenant l'url distante git@github.com: nom_utilisateur / nom_repo.git à votre dépôt git local à l'aide de la commande ci-dessous.
git remote remove origin
git remote add origin git@github.com:user_name/repo_name.git
C'est tout.
Connectez votre client git à votre magasin d'informations d'identification de système d'exploitation. Par exemple, dans Windows, vous liez l'assistant d'informations d'identification à wincred:
git config --global credential.helper wincred
Sur le système d'exploitation Windows, utilisez-le à la place, cela fonctionne pour moi:
https://{Username}:{Password}@github.com/{Username}/{repo}.git
par exemple
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
Je voulais juste faire remarquer plusieurs fois la solution ci-dessus:
git config credential.helper store
Vous pouvez utiliser n'importe quelle commande nécessitant un mot de passe après cela. Vous n'avez pas besoin de pousser. (vous pouvez également tirer par exemple) Après cela, vous n'aurez plus besoin de taper votre nom d'utilisateur / mot de passe.
Pour autant que je sache, il existe simplement deux méthodes sûres : ssh ou passwd crypté à l'aide d'un fichier de clés .
cat ~/.ssh/id_rsa.pub
, collez-le là, nommez-le et enregistrez-le (si vous n'avez pas un tel fichier, générez-en un par vous-même ssh-keygen -t rsa
- Entrez simplement pour toutes les invites)git remote set-url origin git+ssh://git@github.com/username/reponame.git
- vous pouvez le vérifier d'abord engit remote -v
);touch t; git add t; git commit -m "test"; git push
et confirmez oui pour profiter du monde sans mot de passe .Si vous l'utilisez simplement git config --global credential.helper store
comme d'autres l'ont mentionné, vos mots de passe non chiffrés seront simplement stockés dans un texte en clair sous ~/.git-credentials
lequel il n'est pas sûr que cela puisse paraître.
Essayez de le crypter comme
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
Dans ce cas, vous utilisez
https://git@github.com/username/reponame.git
.
Ma solution sur Windows:
ssh-keygen -t rsa
(Appuyez sur Entrée pour toutes les valeurs)Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
Si votre PC est sécurisé ou que vous ne vous souciez pas de la sécurité par mot de passe, cela peut être réalisé très simplement. En supposant que le référentiel distant se trouve sur GitHub et qu'il origin
s'agit de votre nom local pour le référentiel distant, utilisez cette commande
git remote set-url --push origin https://<username>:<password>@github.com/<repo>
L' --push
indicateur garantit que cela modifie l'URL du référentiel pour la git push
commande uniquement. (La question posée dans le message d'origine concerne git push
uniquement la commande. Exiger un nom d'utilisateur + mot de passe uniquement pour les opérations push est la configuration normale pour les référentiels publics sur GitHub. Notez que les référentiels privés sur GitHub nécessiteraient également un nom d'utilisateur + mot de passe pour les opérations d'extraction et de récupération , donc pour un dépôt privé, vous ne voudriez pas utiliser le --push flag
...)
AVERTISSEMENT: cela n'est pas sûr par nature car:
votre FAI, ou toute personne enregistrant vos accès réseau, peut facilement voir le mot de passe en texte brut dans l'URL;
toute personne ayant accès à votre PC peut afficher votre mot de passe à l'aide de git remote show origin
.
C'est pourquoi l'utilisation d'une clé SSH est la réponse acceptée.
Même une clé SSH n'est pas totalement sécurisée . Quiconque accède à votre PC peut toujours, par exemple, effectuer des push qui détruisent votre référentiel ou - pire - push s'engage à apporter des modifications subtiles à votre code. (Tous les commits poussés sont évidemment très visibles sur GitHub. Mais si quelqu'un voulait changer votre code subrepticement, il pourrait--amend
un commit précédent sans changer le message de commit, puis forcer le pousser. Ce serait furtif et assez difficile à remarquer dans la pratique. )
Mais révéler votre mot de passe est pire . Si un attaquant prend connaissance de votre nom d'utilisateur + mot de passe, il peut faire des choses comme vous verrouiller hors de votre propre compte, supprimer votre compte, supprimer définitivement le référentiel, etc.
Alternativement - pour des raisons de simplicité et de sécurité - vous ne pouvez fournir que votre nom d'utilisateur dans l'URL, de sorte que vous devrez taper votre mot de passe à chaque fois git push
mais vous n'aurez pas à donner votre nom d'utilisateur à chaque fois. (J'aime beaucoup cette approche, avoir à taper le mot de passe me donne une pause pour réfléchir à chaque fois que je le fais git push
, donc je ne peux pas git push
par accident.)
git remote set-url --push origin https://<username>@github.com/<repo>
@
, il brise la commande pensant le mot de passe après @ dans le cadre du serveur git?
Tout cela se produit car git ne fournit pas d'option dans les commandes clone / pull / push / fetch pour envoyer les informations d'identification via un canal. Bien qu'il donne credential.helper, il stocke sur le système de fichiers ou crée un démon, etc. Souvent, les informations d'identification de GIT sont celles du niveau système et il incombe à l'application de les appeler à l'aide des commandes git. Très dangereux en effet.
Voici ce que j'ai dû contourner. 1. La version Git (git --version) doit être supérieure ou égale à 1.8.3.
GIT CLONE
Pour le clonage, utilisez "git clone URL" après avoir changé l'URL du format http: // {myuser} @ {my_repo_ip_address} / {myrepo_name.git} en http: // {myuser}: {mypwd} @ {my_repo_ip_address} /{myrepo_name.git}
Purgez ensuite le référentiel du mot de passe comme dans la section suivante.
PURGE
Maintenant, cela aurait disparu et
Si votre application utilise Java pour exécuter ces commandes, utilisez ProcessBuilder au lieu de Runtime. Si vous devez utiliser Runtime, utilisez getRunTime (). Exec qui prend le tableau String comme arguments avec / bin / bash et -c comme arguments plutôt que celui qui prend une seule chaîne comme argument.
GIT FETCH / PULL / PUSH