Une situation plutôt inhabituelle peut-être, mais je veux spécifier une clé SSH privée à utiliser lors de l'exécution d'une commande shell (git) à partir de l'ordinateur local.
Fondamentalement, comme ceci:
git clone git@github.com:TheUser/TheProject.git -key "/home/christoffer/ssh_keys/theuser"
Ou encore mieux (en Ruby):
with_key("/home/christoffer/ssh_keys/theuser") do
sh("git clone [email protected]:TheUser/TheProject.git")
end
J'ai vu des exemples de connexion à un serveur distant avec Net :: SSH qui utilise une clé privée spécifiée, mais il s'agit d'une commande locale. C'est possible?
-i
option comme lessh
fait.git config core.sshCommand 'ssh -i private_key_file'
. Voir ma réponse ciRéponses:
Quelque chose comme ça devrait fonctionner (suggéré par orip):
si vous préférez les sous-coquilles, vous pouvez essayer ce qui suit (bien qu'il soit plus fragile):
Git invoquera SSH qui trouvera son agent par variable d'environnement; à son tour, la clé sera chargée.
Alternativement, le réglage
HOME
peut également faire l'affaire, à condition que vous souhaitiez configurer un répertoire qui ne contient qu'un.ssh
répertoire asHOME
; il peut contenir soit un fichier identity.pub, soit un paramètre de fichier de configuration IdentityFile.la source
ssh-agent bash -c 'ssh-add sshkey; git clone url'
ssh-agent $(..)
syntaxe ne fonctionne pas pour moi et je ne sais pas comment cela est censé fonctionner: (ba) sh devrait d'abord exécuter les commandes à l'intérieur$(..)
, puis exécuter ssh-agent avec la sortie en paramètre.Aucune de ces solutions n'a fonctionné pour moi.
Au lieu de cela, j'élabore sur la mention de @Martin c. Löwis de la définition d'un
config
fichier pour SSH.SSH recherchera le
~/.ssh/config
fichier de l'utilisateur . J'ai le mien configuré comme:Et j'ajoute un dépôt git distant:
Et puis les commandes git fonctionnent normalement pour moi.
REMARQUES
IdentitiesOnly yes
est requis pour empêcher le comportement par défaut SSH d'envoyer le fichier d'identité correspondant au nom de fichier par défaut pour chaque protocole. Si vous avez un fichier nommé~/.ssh/id_rsa
qui sera essayé AVANT votre~/.ssh/id_rsa.github
sans cette option.Références
la source
Host remote.server.com
et continuer d'utiliser l'URL d'originechmod 600 ~/.ssh/config
(voir ici ). Et si vous utilisez GitHub, remplacezHost gitserv
parHost github.com
, omettezHostname remote.server.com
et ajoutez remote avecgit remote add origin [email protected]:user_name/repo_name.git
.À partir de Git 2.3.0, nous avons également la commande simple (aucun fichier de configuration nécessaire):
la source
cannot run ssh -i /home/vagrant/.ssh/git: No such file or directory
bien qu'il existe444 Nov 16 18:12 /home/vagrant/.ssh/git
dels -l /home/vagrant/.ssh/git
chmod 400 <path-to-private-key-file>
. Sinon, la commande git peut échouer sans message d'erreur spécial ...-o IdentitiesOnly=yes
pour s'assurer que la clé spécifiée avec-i
est utilisée (par opposition à une clé de l'agent SSH).Les suggestions d'autres personnes
~/.ssh/config
sont extrêmement compliquées. Cela peut être aussi simple que:la source
IdentitiesOnly
option.git remote add ssh://personal/org/proj.git && git remote add ssh://corporate/org/proj.git
. Ensuite, votre configuration ressemble àHost personal HostName github.com ... Host corporate HostName github.com
Contenu de my_git_ssh_wrapper:
Ensuite, vous pouvez utiliser la clé en faisant:
la source
GIT_SSH="git_wrapper" git clone ssh://user@server/path/to/project"
Avec git 2.10+ (Q3 2016: publié le 2 septembre 2016), vous avez la possibilité de définir une configuration pour
GIT_SSH_COMMAND
(et pas seulement une variable d'environnement comme décrit dans la réponse de Rober Jack Will ) )Voir commit 3c8ede3 (26 juin 2016) de Nguyễn Thái Ngọc Duy (
pclouds
) .(Fusionné par Junio C Hamano -
gitster
- en commit dc21164 , 19 juil.2016 )Cela signifie que le
git clone
peut être:Vous pouvez même le définir pour une seule commande:
Il est plus facile que la fixation d' un
GIT_SSH_COMMAND
variable d'environnement, qui, sous Windows, comme indiqué par Mátyás Kuti-Kreszács , seraitla source
git -c core.sshCommand="ssh -i private_key_file" clone host:repo.git
suivie de l'ensemble de configurationgit config core.sshCommand 'ssh -i private_key_file'
Pour résumer les réponses et les commentaires , la meilleure façon de configurer git pour utiliser différents fichiers clés et ensuite de l'oublier, qui prend également en charge différents utilisateurs pour le même hôte (par exemple, un compte GitHub personnel et un compte professionnel), qui fonctionne sous Windows est également de modifier
~/.ssh/config
(ouc:\Users\<your user>\.ssh\config
) et de spécifier plusieurs identités:Ensuite, pour cloner un projet en tant qu'utilisateur personnel, exécutez simplement la
git clone
commande standard .Pour cloner le référentiel en tant que
workuser
, exécutezgit clone git@github-work:company/project.git
.la source
dandv
etworkuser
pour soutenir mon exemple, "par exemple un compte GitHub personnel et un compte professionnel".dandv
est mon nom d'utilisateur GitHub.IdentitiesOnly yes
à mon fichier de configuration ssh.Comme indiqué ici: https://superuser.com/a/912281/607049
Vous pouvez le configurer par repo:
la source
-F /dev/null
-il? Pour autant que je puisse voir, cela changera configFile par~/.ssh/config
défaut, mais pourquoi cela est-il souhaité? Pour garantir une commande en bac à sable?Le problème est lorsque vous avez différents référentiels distants sur le même hôte (par exemple github.com) et que vous souhaitez interagir avec eux en utilisant différentes clés ssh (c'est-à-dire différents comptes GitHub).
Pour pouvoir faire ça:
Vous devez d'abord déclarer vos différentes clés dans le
~/.ssh/config
fichier.Ce faisant, vous associez la deuxième clé à un nouveau nom convivial "XXX" pour github.com.
Ensuite, vous devez modifier l'origine distante de votre référentiel particulier, afin qu'il utilise le nom convivial que vous venez de définir.
Accédez à votre dossier de référentiel local dans une invite de commande et affichez l'origine distante actuelle:
Puis changez d'origine avec:
Maintenant, vous pouvez pousser, récupérer ... avec la bonne touche automatiquement.
la source
ou
la source
Meilleure idée d'ajouter cet hôte ou cette ip au
.ssh/config
fichier comme ceci:la source
git clone git@gh-work:repo/project.git
Dans mon ~ / .ssh / config, j'ai deux sections qui utilisent toutes les deux github.com pour HostName. Ils ont juste différents IdentityFile et Host~/.ssh/config
pastebin.com/8rYn7yCiJe suis allé avec la variable d'environnement GIT_SSH. Voici mon wrapper, similaire à celui de Joe Block ci-dessus, mais gère n'importe quelle quantité d'arguments.
Fichier ~ / gitwrap.sh
Ensuite, dans mon .bashrc, ajoutez ce qui suit:
la source
gitwrap.sh
, par exemple/home/ubuntu/gitwrap.sh
-o StrictHostKeyChecking=no
à la commande sshSi aucune des autres solutions ne fonctionne pour vous et que vous avez créé plusieurs clés ssh, mais que vous ne pouvez toujours pas faire des choses simples comme
puis en supposant que vous avez deux fichiers clés ssh comme
puis à l'intérieur du dépôt git, essayez:
et assurez-vous également que votre nom d'utilisateur et votre ID utilisateur par défaut github sont corrects en:
Voir https://gist.github.com/jexchan/2351996 pour plus d'informations.
la source
Could not open a connection to your authentication agent.
, essayez$ eval `ssh-agent -s`
et réessayez.ssh-add
astuce de commande a fonctionné pour moi. Ajoutez la clé d'identité à la liste de ceux qui sont essayés lorsque ssh s'authentifie. Cela a bien fonctionné pour moi!ssh-add
?.git
intérieur du référentiel et non le programme git globalement. Vous pouvez utiliser--global
pour définir le nom d'utilisateur et l'e-mail globaux.Lorsque vous devez vous connecter à github avec une demande normale (
git pull origin master
), réglage de l'hôte comme*
dans~/.ssh/config
travaillé pour moi, tout autre hôte ( par exemple, « GitHub » ou « Go ») ne fonctionnait pas.la source
Host my-host-alias
, vous devez définirremote.origin.url=git@my-host-alias:[username]/[repo].git
.Beaucoup de ces solutions semblaient séduisantes. Cependant, j'ai trouvé l'approche générique git-wrapping-script sur le lien suivant pour être la plus utile:
Comment spécifier un fichier de clé ssh avec la
git
commandeLe fait étant qu'il n'y a pas de
git
commande telle que la suivante:La solution d'Alvin consiste à utiliser un script bash-wrapper bien défini qui comble cette lacune:
Où
git.sh
est:Je peux vérifier que cette résolu un problème que j'avais avec l' utilisateur / reconnaissance clé pour une prise en pension de bitbucket à distance avec
git remote update
,git pull
etgit clone
; qui fonctionnent désormais très bien dans uncron
script de travail qui avait autrement du mal à naviguer dans le shell limité. J'ai également pu appeler ce script à partir de R et toujours résoudre le mêmecron
problème d'exécution (par exemplesystem("bash git.sh -i ~/.ssh/thatuserkey.pem pull")
).Non pas que R soit le même que Ruby, mais si R peut le faire ... O :-)
la source
GIT_SSH_COMMAND="ssh -i ~/.ssh/thatuserkey.pem" git clone clone [email protected]:/git/repo.git
selon la réponse de Robert Jack Will ?si vous avez un répertoire sur votre chemin où vous souhaitez vous connecter avec un fichier d'identification donné, vous pouvez spécifier d'utiliser un fichier d'identification spécifique via le fichier .ssh / config en définissant par
ControlPath
exemple:Ensuite
ssh
, utilisera le fichier d'identité spécifié lors de l'exécution des commandes git sous le chemin de travail donné.la source
ControlMaster auto
etControlPersist yes
, de sorte que vous n'avez pas besoin de retaper le mot de passe à chaque fois. J'ai trouvé l'info dans cet articleVous devez créer un ~ / .ssh / config comme ci-dessous
autorisation comme ci-dessous
Ajoutez votre clé publique dans votre git (cat ~ / .ssh / id_rsa_pub [ou nom simillar])
puis git clone comme ci-dessous
la source
Beaucoup de bonnes réponses, mais certaines supposent des connaissances administratives préalables.
Je pense qu'il est important de souligner explicitement que si vous avez démarré votre projet en clonant l'URL Web -
https://github.com/<user-name>/<project-name>.git
vous devez vous assurer que la
url
valeur sous[remote "origin"]
dans le a.git/config
été remplacée par l'URL SSH (voir le bloc de code ci-dessous).En plus de cela, assurez-vous d'ajouter le
sshCommmand
comme mentionné ci-dessous:En savoir plus ici .
la source
Dans Windows avec Git Bash, vous pouvez utiliser les éléments suivants pour ajouter un référentiel,
ssh-agent bash -c 'ssh-add "key-address"; git remote add origin "rep-address"'
par exemple:ssh-agent bash -c 'ssh-add /d/test/PrivateKey.ppk; git remote add origin [email protected]:test/test.git'
quelle clé privée se trouve dans le lecteur D, test de dossier de l'ordinateur. De plus, si vous souhaitez cloner un référentiel, vous pouvez changergit remote add origin
avecgit clone
.Après avoir entré cela dans Git Bash, il vous demandera une phrase secrète!
Soyez conscient que la clé privée openssh et la clé privée putty sont différentes!
Si vous avez créé vos clés avec puttygen, vous devez convertir votre clé privée en openssh!
la source
Vous pouvez utiliser la variable d'environnement GIT_SSH. Mais vous devrez encapsuler ssh et options dans un script shell.
Voir le manuel de git:
man git
dans votre shell de commande.la source
J'utilise
zsh
et différentes clés sont chargéesssh-agent
automatiquement sur mon shell zsh à d'autres fins (c'est-à-dire l'accès aux serveurs distants) sur mon ordinateur portable. J'ai modifié la réponse de @ Nick et je l'utilise pour l'un de mes dépôts qui doit être actualisé souvent. (Dans ce cas, c'est la miennedotfiles
dont je veux la même et la dernière version sur toutes mes machines, où que je travaille.)cd
le repo dir réussit, tirez du repo distantla source
pour le gitlab
RSAAuthentication yes
le doc est ici
la source
Pour que la variable d'environnement GIT_SSH_COMMAND fonctionne sous Windows au lieu de:
Utilisation:
La citation doit être comme
Certains backgorund: https://stackoverflow.com/a/34402887/10671021
la source
Si le numéro de port SSH n'est pas 22 (par défaut), ajoutez
Port xx
dans~/.ssh/config
Dans mon cas (synologie),
Ensuite, clonez en utilisant le titre d'hôte dans la configuration. ("my_synology". pour éviter "@" de @chopstik)
la source
Si vous êtes comme moi, vous pouvez:
Gardez vos clés SSH organisées
Gardez vos commandes de git clone simples
Manipulez n'importe quel nombre de clés pour n'importe quel nombre de référentiels.
Réduisez la maintenance de votre clé ssh.
Je garde mes clés dans mon
~/.ssh/keys
répertoire.Je préfère la convention à la configuration.
Je pense que le code est une loi; plus c'est simple, mieux c'est.
ÉTAPE 1 - Créer un alias
Ajoutez cet alias à votre shell:
alias git-clone='GIT_SSH=ssh_wrapper git clone'
ÉTAPE 2 - Créer un script
Ajoutez ce script ssh_wrapper à votre CHEMIN :
EXEMPLES
Utilisez la clé github.com/l3x:
L'exemple suivant utilise également la clé github.com/l3x (par défaut):
Utilisez la clé bitbucket.org/lsheehan:
REMARQUES
Remplacez SSH_KEY par défaut dans le script ssh_wrapper par ce que vous utilisez la plupart du temps. De cette façon, vous n'avez pas besoin d'utiliser la variable KEY la plupart du temps.
Vous pouvez penser, "Hé! Cela se passe beaucoup avec un alias, un script et un répertoire de clés", mais pour moi c'est la convention. Presque tous mes postes de travail (et serveurs d'ailleurs) sont configurés de manière similaire.
Mon objectif ici est de simplifier les commandes que j'exécute régulièrement.
Mes conventions, par exemple, les scripts Bash, les alias, etc., créent un environnement cohérent et m'aident à garder les choses simples.
KISS et les noms comptent.
Pour plus de conseils de conception, consultez le chapitre 4 SOLID Design in Go de mon livre: https://www.amazon.com/Learning-Functional-Programming-Lex-Sheehan-ebook/dp/B0725B8MYW
J'espère que cela pourra aider. - Lex
la source
Vous pouvez essayer le package sshmulti npm pour conserver plusieurs clés ssh.
la source
Le problème avec cette méthode est, au moins lors de l'exécution par bash.exe sur Windows, qu'elle créera à chaque fois un nouveau processus qui restera dormant.
Si vous voulez utiliser cela pour le repo syncig dans les délais, vous devez ajouter "&& ssh-agent -k" à la fin.
Quelque chose comme:
ssh-agent -k va tuer le processus une fois terminé.
la source
J'avais juste besoin d'ajouter la clé puis d'exécuter à nouveau le clone git.
la source
Voici le hack de clé ssh que j'ai trouvé en trouvant une solution à ce problème:
Par exemple, vous avez 2 jeux de clés différents:
key1, key1.pub, key2, key2.pub
Conservez ces clés dans votre
.ssh
répertoireMaintenant, dans votre fichier
.bashrc
ou.bash_profile
alias, ajoutez ces commandesalias key1='cp ~/.ssh/key1 id_rsa && cp ~/.ssh/key1.pub id_rsa.pub'
alias key2='cp ~/.ssh/key2 id_rsa && cp ~/.ssh/key2.pub id_rsa.pub'
Voila! Vous avez un raccourci pour changer de clé quand vous le souhaitez!
J'espère que cela fonctionne pour toi.
la source