ssh
a la -i
possibilité d'indiquer le fichier de clé privée à utiliser lors de l'authentification:
-i identity_file
Sélectionne un fichier dans lequel l'identité (clé privée) pour l'authentification RSA ou DSA est lue. La valeur par défaut est
~/.ssh/identity
pour la version de protocole 1~/.ssh/id_rsa
et~/.ssh/id_dsa
pour la version de protocole 2. Les fichiers d'identité peuvent également être spécifiés hôte par hôte dans le fichier de configuration. Il est possible d'avoir plusieurs-i
options (et plusieurs identités spécifiées dans les fichiers de configuration).
Existe-t-il une méthode similaire pour déterminer git
le fichier de clé privée à utiliser sur un système comportant plusieurs clés privées dans le ~/.ssh
répertoire?
ssh
git
authentication
private-key
Jrdioko
la source
la source
Réponses:
Dans
~/.ssh/config
, ajoutez:Maintenant vous pouvez faire
git clone [email protected]:username/repo.git
.REMARQUE: Vérifiez que les autorisations sur IdentityFile sont 400. SSH rejettera, de manière non explicite, les clés SSH trop lisibles. Cela ressemblera simplement à un rejet de titres de compétences. La solution, dans ce cas, est la suivante:
la source
HostName
: Spécifie le nom d'hôte réel auquel se connecter. Ceci peut être utilisé pour spécifier des pseudonymes ou des abréviations pour les hôtes." Ma version ssh est openssh-6.7p1.chmod 600 ~/.ssh/config
core.sshCommand
configuration de git. superuser.com/a/912281/162466Variable d'environnement
GIT_SSH_COMMAND
:A partir de la version 2.3.0 de Git, vous pouvez utiliser la variable d'environnement
GIT_SSH_COMMAND
comme ceci:Notez que
-i
votre fichier de configuration peut parfois remplacer le fichier. Dans ce cas, vous devez donner à SSH un fichier de configuration vide, comme ceci:Configuration
core.sshCommand
:À partir de la version 2.10.0 de Git, vous pouvez le configurer par référentiel ou globalement, de sorte que vous n’ayez plus à définir la variable d’environnement!
la source
export GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_example"
-à- diregit clone example
example=hello /usr/bin/env | grep example
./dev/null
n'est qu'un nom de fichier valide dans les systèmes d'exploitation de type UNIX, il ne fonctionne pas sous Windows.GIT_SSH_COMMAND
ne fonctionnait pas jusqu'à ce que jeIdentitiesOnly
, comme cette commande:GIT_SSH_COMMAND="ssh -i ~/.ssh/mysubdir/id_rsa -o 'IdentitiesOnly yes'" git push
.Il n’existe aucun moyen direct de déterminer
git
la clé privée à utiliser, car elle dépendssh
de l’authentification du référentiel. Cependant, il existe encore quelques moyens pour atteindre votre objectif:Option 1:
ssh-agent
Vous pouvez utiliser
ssh-agent
pour autoriser temporairement votre clé privée.Par exemple:
Option 2:
GIT_SSH_COMMAND
Passez les arguments ssh en utilisant la
GIT_SSH_COMMAND
variable d'environnement (Git 2.3.0+).Par exemple:
Vous pouvez taper tout cela sur une seule ligne - ignorer
$
et laisser de côté\
.Option 3:
GIT_SSH
Passez les arguments ssh en utilisant la
GIT_SSH
variable d'environnement pour spécifier un autressh
binaire.Par exemple:
Remarque: Les lignes ci-dessus sont des lignes de commande shell (terminal) que vous devez coller dans votre terminal. Ils vont créer un fichier nommé
ssh
, le rendre exécutable et (indirectement) l'exécuter.Remarque:
GIT_SSH
disponible depuis v0.99.4 (2005).Option 4:
~/.ssh/config
Utilisez le
~/.ssh/config
fichier comme suggéré dans d'autres réponses afin de spécifier l'emplacement de votre clé privée, par exemplela source
$ ssh-agent sh -c 'ssh-add ~/.ssh/id_rsa; git fetch user@host'
travaillé pour moi quand rien d'autre ne le ferait. Gloire.~/.ssh/config
méthode, env vars n'a pas fonctionné pour moi ...GIT_SSH
est disponible depuis v0.99.4 (août 2005) , donc depuis que Git existe (avril 2005).Ecrivez un script qui appelle
ssh
avec les arguments de votre choix et mettez le nom de fichier du script dans$GIT_SSH
. Ou mettez simplement votre configuration dans~/.ssh/config
.la source
~/.ssh/config
Est le chemin à parcourir.$GIT_SSH
un script a résolu ce problème. Merci!Si vous ne souhaitez pas spécifier les variables d'environnement à chaque fois que vous exécutez git, ne voulez pas un autre script wrapper, n'exécutez / ne pouvez pas exécuter ssh-agent (1), et ne souhaitez pas télécharger un autre package rien que pour cela, utilisez git - transport externe à distance (1):
Je considère cette solution supérieure parce que:
la source
git
ressource Chef à utiliser des clés de déploiement spécifiques au référentiel pour cloner / extraire des référentiels Github privés. L’avantage supplémentaire de cette méthode par rapport aux méthodes basées sur l’environnement et les scripts est que, puisque le chemin de clé est codé dans la configuration du référentiel de travail, elle utilisera la même clé lors du clonage initial et des extractions / poussées ultérieures..ssh/config
etc. +1!ext
transport dans chaque sous-module pour que la récursion dans le parent fonctionne.fatal: transport 'ext' not allowed
, vous devez ajouter le protocole ext à la liste blanche viaexport GIT_ALLOW_PROTOCOL=ext
. Fondamentalement, l’assistant distant git-remote-ext (qui prend en charge les URL "ext :: ssh exemple.com% S foo / repo") permet l’exécution de commandes arbitraires. Normalement, cela ne pose aucun problème, car l'utilisateur voit et fait toujours confiance à l'URL qu'il transmet à git. Cependant, les sous-modules git, via le fichier .gitmodules, permettent à un attaquant de demander au client de récupérer des URL git arbitraires. hackerone.com/reports/104465Utilisez la configuration d’hôte personnalisée dans
~/.ssh/config
, comme ceci:utilisez ensuite votre nom d’hôte personnalisé comme ceci:
la source
Host work.github.com
HostName github.com
IdentityFile ~/.ssh/work
suffisait de définir , puis de remplacer "github.com" par "work.github.com" à chaque fois que je clonais un référentiel de travail. Il se connecte toujours à "github.com", mais en utilisant une paire de clés autre que celle par défaut.~/.ssh/config
fichier. Toute autre réponse ignore comment vous pouvez définir l'hôte lorsque vous ajoutez l'origine, ce qui permet automatiquement à git d'utiliser le fichier de clé correct. MERCI!!Après ma lutte avec
$GIT_SSH
je voudrais partager ce qui a fonctionné pour moi.À travers mes exemples, je suppose que votre clé privée est située à l'adresse
/home/user/.ssh/jenkins
Erreur à éviter: la valeur GIT_SSH inclut des options
ou quelque chose de semblable échouera, car git essaiera d'exécuter la valeur sous forme de fichier . Pour cette raison, vous devez créer un script.
Exemple de travail du script $ GIT_SSH
/home/user/gssh.sh
Le script sera appelé comme suit:
Exemple de script pouvant ressembler à:
Notez le
$*
à la fin, c'est une partie importante de celui-ci.Une alternative encore plus sûre, qui éviterait tout conflit possible avec quoi que ce soit dans votre fichier de configuration par défaut (en mentionnant explicitement le port à utiliser) serait:
En supposant que le script est en place
/home/user/gssh.sh
, vous devrez alors:et tout fonctionnera.
la source
Vous pouvez simplement utiliser ssh-ident au lieu de créer votre propre wrapper.
Vous pouvez en savoir plus sur: https://github.com/ccontavalli/ssh-ident
Il charge les clés ssh à la demande lorsque cela est nécessaire pour la première fois, même avec plusieurs sessions de connexion, xterms ou foyers partagés NFS.
Avec un fichier de configuration minuscule, il peut charger automatiquement différentes clés et les garder séparées dans différents agents (pour le transfert d'agent) en fonction de vos tâches.
la source
J'ai eu un client qui avait besoin d'un compte séparé github. Je devais donc utiliser une clé distincte uniquement pour ce projet.
Ma solution a été d'ajouter ceci à mon .zshrc / .bashrc:
Chaque fois que je veux utiliser git pour ce projet, je remplace "infogit" par git:
Pour moi, c'est plus facile à retenir.
la source
Je règle donc la variable env GIT_SSH sur
$HOME/bin/git-ssh
.Pour que ma configuration de référentiel dicte l'identité ssh à utiliser, mon
~/bin/git-ssh
fichier est le suivant:Ensuite, j'ai un paramètre global de configuration git:
Et dans n'importe quel référentiel git, je peux simplement définir une
ssh.identity
valeur de configuration git locale :Voila!
Si vous pouvez avoir une adresse e-mail différente pour chaque identité, cela devient encore plus simple, car vous pouvez simplement nommer vos clés après vos adresses e-mail, puis laisser le fichier user.email de git config définir la clé de la manière
~/bin/git-ssh
suivante:la source
Ma solution était la suivante:
créer un script:
alors quand vous devez changer le var run:
N'oubliez pas le point supplémentaire !! cela rend le script définir les environnements vars !! --key et --port sont optionnels.
la source
Généralement, vous voulez utiliser
~/.ssh/config
pour cela. Associez simplement les adresses de serveur aux clés que vous souhaitez utiliser pour elles comme suit:Host *
dénote tout serveur, donc je l'utilise pour définir~/.ssh/id_rsa
comme clé par défaut à utiliser.la source
Je construis sur @shellholic et ce fil SO avec quelques tecks. J'utilise GitHub comme exemple et suppose que vous avez une clé privée
~/.ssh/github
(sinon, consultez ce fil de discussion SO ) et que vous avez ajouté la clé publique à votre profil GitHub (sinon consultez l'aide de GitHub ).Si nécessaire, créez un nouveau fichier de configuration SSH à
~/.ssh/config
et modifiez les autorisations sur 400Ajoutez ceci au
~/.ssh/config
fichier:Si vous avez déjà une configuration à distance, vous pouvez vouloir la supprimer, sinon vous pouvez toujours être invité à entrer votre nom d'utilisateur et votre mot de passe:
Ajoutez ensuite une télécommande au référentiel git et notez les deux points avant le nom d'utilisateur:
Et ensuite, les commandes git fonctionnent normalement, par exemple:
@ HeyWatchThis sur ce fil SO a suggéré d'ajouter
IdentitiesOnly yes
pour empêcher le comportement par défaut de SSH d'envoyer le fichier d'identité correspondant au nom de fichier par défaut pour chaque protocole. Voir ce fil pour plus d'informations et de références.la source
Il suffit d'utiliser
ssh-agent
et dessh-add
commandes.Après avoir exécuté les commandes ci-dessus, vous pouvez utiliser les deux touches simultanément. Il suffit de taper
pour cloner votre référentiel.
Vous devez exécuter la commande ci-dessus après le redémarrage de votre ordinateur.
la source
J'utilise la version 2.16 de git et je n'ai pas besoin d'un seul script, pas même d'une configuration ou de commandes modifiées.
Et git lit à clé automatiquement. Je ne demande rien et ça ne jette pas d'erreur. Ça fonctionne très bien.
la source
~/.ssh
répertoire»?Bien que la question ne le demande pas, j'inclus cette réponse pour toute autre personne cherchant à résoudre le même problème spécifiquement pour gitlab .
La solution gitlab
J'ai essayé d'utiliser l' approche des variables d'environnement , mais même la documentation de git recommande de l'utiliser
~/.ssh/config
pour autre chose que le cas simple. Dans mon cas, je pousse sur un serveur gitlab - et je voulais le faire en tant qu'utilisateur spécifique - qui est bien sûr défini par la clé privée lors de l' authentification et non par le nom d'utilisateurgit
. Une fois implémenté, je réalise simplement ce qui suit:Installer
Rappelez-vous l'emplacement de votre clé privée
/myfolder/.ssh/my_gitlab_id_rsa
dans mon cas.Ajouter une entrée dans
~/.ssh/config
:Ajoutez le git-alias dans
~/.gitconfig
:En bonus, j'effectue mes commits sur ce même hôte en tant qu'utilisateur spécifique avec ce git-alias :
Explication
Tout ce qui précède suppose que la télécommande appropriée est
origin
et que la branche pertinente est actuellement extraite. Pour référence, j'ai rencontré plusieurs points qui devaient être abordés:gitlab_as_me
et je n'aimais pas voir la télécommande supplémentaire traîner dans mon arbre de journalisation, alors je la supprime une fois l'opération terminée.gitlab_as_me
vous devez spécifier la branche sur laquelle vous poussez.origin
pointeur local doit être "mis à jour" pour correspondregitlab_as_me
(legit pull origin $branch
fait ceci)la source
Entrez le chemin que vous souhaitez enregistrer (ex: my-pc / Desktop / .ssh / ed25519)
Ajoutez la clé publique à votre gitlab ( Comment ajouter une clé ssh à gitlab )
la source
la source