Ho il seguente caso d’uso: vorrei poter git@git.company.com:gitolite-admin
a [email protected]:gitolite-admin
usando la chiave privata dell’utente gitolite-admin
, mentre voglio spingere a [email protected]:some_repo
utilizza la chiave privata “mia”. AFAIK, non posso risolverlo usando ~/.ssh/config
, perché il nome utente e il nome del server sono identici in entrambi i casi. Poiché utilizzo principalmente la mia chiave privata, ho definito in ~/.ssh/config
per [email protected]
. Qualcuno sa di un modo per sovrascrivere la chiave che viene utilizzata per una singola git
?
(A parte: la gitolite distingue chi sta facendo la spinta in base alla chiave, quindi non è un problema, in termini di accesso, proprietà e auditing, che la stringa user @ server sia identica per diversi utenti.)
Anche se l’utente e l’host sono gli stessi, possono ancora essere distinti in ~/.ssh/config
. Ad esempio, se la tua configurazione appare così:
Host gitolite-as-alice HostName git.company.com User git IdentityFile /home/whoever/.ssh/id_rsa.alice IdentitiesOnly yes Host gitolite-as-bob HostName git.company.com User git IdentityFile /home/whoever/.ssh/id_dsa.bob IdentitiesOnly yes
Quindi devi semplicemente usare gitolite-as-alice
e gitolite-as-bob
posto del nome host nel tuo URL:
git remote add alice [email protected]:whatever.git git remote add bob [email protected]:whatever.git
Si desidera includere l’opzione IdentitiesOnly yes
per impedire l’utilizzo di ID predefiniti. Altrimenti, se hai anche i file id che corrispondono ai nomi predefiniti, verranno provati per primi perché a differenza di altre opzioni di configurazione (che rispettano il “primo in classifica”) l’opzione IdentityFile
aggiunta all’elenco delle identity framework da provare. Vedi: https://serverfault.com/questions/450796/how-could-i-stop-ssh-offering-a-wrong-key/450807#450807
Un approccio alternativo a quello proposto sopra da Mark Longair consiste nell’utilizzare un alias che eseguirà qualsiasi comando git, su qualsiasi telecomando, con una chiave SSH alternativa. L’idea è sostanzialmente quella di cambiare la tua id quadro SSH durante l’esecuzione dei comandi git.
Vantaggi relativi all’approccio alias host nell’altra risposta:
remote
esplicitamente. Io uso alcuni piccoli script e un admin
git alias. In questo modo, ad esempio:
git admin push
Per passare al telecomando predefinito usando il tasto SSH alternativo (“admin”). Ancora, puoi usare qualsiasi comando (non solo push
) con questo alias. Potresti anche fare git admin clone ...
per clonare un repository a cui avresti accesso solo usando la tua chiave “admin”.
Passo 1: crea le chiavi SSH alternative, opzionalmente imposta una passphrase nel caso tu stia facendo questo sulla macchina di qualcun altro.
Passaggio 2: creare uno script chiamato “ssh-as.sh” che esegua roba che utilizza SSH, ma utilizza una determinata chiave SSH anziché l’impostazione predefinita:
#!/bin/bash exec ssh ${SSH_KEYFILE+-i "$SSH_KEYFILE"} "[email protected]"
Passo 3: crea uno script chiamato “git-as.sh” che esegue comandi git usando la chiave SSH fornita.
#!/bin/bash SSH_KEYFILE=$1 GIT_SSH=${BASH_SOURCE%/*}/ssh-as.sh exec git "${@:2}"
Passaggio 4: aggiungere un alias (utilizzando qualcosa di appropriato per “PATH_TO_SCRIPTS_DIR” di seguito):
# Run git commands as the SSH identity provided by the keyfile ~/.ssh/admin git config --global alias.admin \!"PATH_TO_SCRIPTS_DIR/git-as.sh ~/.ssh/admin"
Maggiori dettagli su: http://noamlewis.wordpress.com/2013/01/24/git-admin-an-alias-for-running-git-commands-as-a-privileged-ssh-identity/
È ansible utilizzare la variabile ambientale git GIT_SSH_COMMAND
. Esegui questo nel tuo terminale sotto il tuo repository git:
GIT_SSH_COMMAND='ssh -i ~/.ssh/your_private_key' git submodule update --init
Sostituisci ~/.ssh/your_private_key
con il percorso della chiave privata ssh che vuoi usare. E puoi cambiare il comando git successivo (nell’esempio è git submodule update --init
) ad altri come git pull
, git fetch
, ecc.
Un’altra alternativa è usare ssh-ident, per gestire le tue identity framework ssh .
Carica automaticamente e utilizza chiavi diverse in base alla directory di lavoro corrente, alle opzioni ssh e così via … il che significa che puoi facilmente avere una cartella di lavoro / directory e privata / che in modo trasparente finiscono usando chiavi e id quadro diverse con ssh.
Un sistema basato su Unix (Linux, BSD, Mac OS X), l’id quadro predefinita è memorizzata nella directory $ HOME / .ssh , in 2 file: private key: $HOME/.ssh/id_rsa public key: $HOME/.ssh/id_rsa.pub
Quando si usa ssh
senza l’opzione -i
, utilizza la chiave privata predefinita per l’autenticazione con il sistema remoto.
Se si dispone di un’altra chiave privata che si desidera utilizzare, ad esempio $ HOME / .ssh / deploy_key , è necessario utilizzare ssh -i ~/.ssh/deploy_key ...
È noioso. Puoi aggiungere le seguenti righe al tuo $ HOME / .bash_profile : ssh-add ~/.ssh/deploy_key ssh-add ~/.ssh/id_rsa
Quindi, ogni volta che usi ssh
o git
o scp
(in pratica anche ssh
), non devi più usare l’opzione -i
.
Puoi aggiungere tutte le chiavi che vuoi nel file $ HOME / .bash_profile .
Sto usando Git Bash su Win7. Il seguente ha funzionato per me.
Crea un file di configurazione in ~ / .ssh / config o c: / users / [nome_utente_suoi /. Ssh / config. Nel file inserisci:
Host your_host.com IdentityFile [absolute_path_to_your_.ssh]\id_rsa
Immagino che l’host debba essere un URL e non solo un “nome” o un riferimento per il tuo host. Per esempio,
Host github.com IdentityFile c:/users/[user_name]/.ssh/id_rsa
Il percorso può anche essere scritto in / c / users / [user_name] / …. formato
Anche la soluzione fornita da Giordano Scalzo è ottima. https://stackoverflow.com/a/9149518/1738546
Se si utilizza la versione di Git di ssh su Windows, appare la riga del file di id quadro nella configurazione di ssh
IdentityFile /c/Users/Whoever/.ssh/id_rsa.alice
dove /c
è per c:
Per controllare, in git bash do
cd ~/.ssh pwd
Potrebbe essere necessario rimuovere (o commentare) la configurazione host predefinita