2011-10-14 23 views
56

Sto provando a eseguire git clone senza ssh che controlla la chiave dell'host del repository. Posso farlo da ssh così:Passare le opzioni ssh su git clone

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected] 

C'è un modo di passare le stesse opzioni di ssh al comando git clone?

Modifica: C'è una restrizione che non posso modificare ~/.ssh/config o altri file su quella macchina.

+1

Quello che provi a fare è molto rischioso e probabilmente non dovresti farlo. Disabilitare la verifica se l'identità del server SSH remoto è una cattiva idea nella maggior parte delle situazioni. Disabilita in modo efficace tutta la sicurezza ottenuta tramite l'uso di SSH e ti apri agli attacchi man-in-the-middle. – aef

risposta

32

aggiungerli al tuo ~/.ssh/config:

Host host 
    HostName host 
    User user 
    SshOption1 Value1 
    SshOption2 Value2 

Il Host ingresso è ciò che è necessario specificare sulla riga di comando, e la HostName è il vero nome host. Possono essere uguali oppure la voce Host può essere un alias. La voce User viene utilizzata se non si specifica [email protected] sulla riga di comando.

Se è necessario configurarlo sulla riga di comando, impostare la variabile di ambiente GIT_SSH in modo che punti a uno script con le opzioni in esso contenute.

+2

Ho dimenticato di dire che non posso modificare alcun file su quella macchina. Altrimenti, sì, la tua soluzione funzionerebbe. –

+21

Usa la variabile di ambiente 'GIT_SSH'. –

+0

Grazie, funziona! –

16

Ecco esempio difficile come passare gli argomenti SSH utilizzando variabile GIT_SSH:

$ echo 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $*' > ssh 
$ chmod +x ssh 
$ GIT_TRACE=1 GIT_SSH="$PWD/ssh" git clone [email protected] 

Nota: Sopra le linee sono terminali righe di comando che si dovrebbe incollare nel vostro terminale. Creerà un file ssh, renderlo eseguibile ed eseguirlo.

Se si desidera passare l'opzione della chiave privata, verificare How to tell git which private key to use?.

67

Il git 2.3 rilasciato di recente supporta una nuova variabile "GIT_SSH_COMMAND" che può essere utilizzata per definire un comando con parametri.

GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone [email protected] 

$GIT_SSH_COMMAND prevale sul $GIT_SSH, ed è interpretata dalla shell, che consente argomenti addizionali da inclusi.

+0

Dovrebbe esserci una nuova riga prima di 'git clone' o il codice è corretto? –

+5

Questo dovrebbe essere corretto, senza la nuova riga la variabile dovrebbe essere impostata per il seguente comando. Se aggiungi una nuova riga, dovrai esportare la variabile, quindi dovrebbe funzionare. – Boris

+0

Grazie, sono rimasto bloccato su questo per 2 giorni! –

11

Un'altra opzione fatta secondo diverse chiavi è git config core.sshCommand con git 2.10+ (Q3 2016)

Questa è un'alternativa alla variabile ambiente descritto in Boris s' answer)

Vedere commit 3c8ede3 (26 Giu 2016) di Nguyễn Thái Ngọc Duy (pclouds).
(fusa per Junio C Hamano -- gitster -- in commit dc21164 19 Lug 2016)

Una nuova variabile di configurazione core.sshCommand è stato aggiunto alla specificare quale valore per GIT_SSH_COMMAND da usare per ogni repository.

Simile a $GIT_ASKPASS o $GIT_PROXY_COMMAND, leggiamo anche da file di configurazione prima poi ripiegare a $GIT_SSH_COMMAND.

Ciò è utile per selezionare diverse chiavi private destinati alla stesso host (es github)

core.sshCommand: 

Se questa variabile è impostata, git fetch e git push utilizzerà il comando specificato anziché ssh quando devono connettersi a un sistema remoto.
Il comando è nella stessa forma della variabile di ambiente GIT_SSH_COMMAND ed è sovrascritto quando la variabile di ambiente è impostata.

Significa che il git clone possono essere:

cd /path/to/my/repo 
git config core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' 
# later on 
git clone host:repo.git 

Se si desidera applicare che per tutti pronti contro termine, come user1300959 aggiunge in the comments, si usa una configurazione globale

git config --global core.sshCommand ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no 
+2

Probabilmente non hai ancora un repository, dato che fai 'git clone' - in questo caso potresti voler configurare il comando git ssh globalmente:' git config --global core.sshCommand ... ' – iurii

+0

@ user1300959 Buon punto, grazie. Ho incluso il tuo commento nella risposta per maggiore visibilità. – VonC

2

Penso che l'aggiornamento git a una versione> = 2.3 e l'uso di GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone [email protected] sia l'opzione di scommessa, ma se non fosse possibile, @ josh-lee ha dato un buona opzione, ma per favore, aggiorna la tua risposta facendo rientrare il file di configurazione ssh.

Host host 
    HostName host 
    StrictHostKeyChecking no 
    UserKnownHostsFile /dev/null