Passaggio delle opzioni ssh a git clone


103

Sto provando a eseguire git clonesenza ssh che controlla la chiave dell'host del repository. Posso farlo da ssh in questo modo:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host

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

Modifica: c'è una restrizione che non posso modificare ~/.ssh/configo altri file su quella macchina.


2
Quello che cerchi di 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. Disattivi efficacemente tutta la sicurezza ottenuta utilizzando SSH e ti apri agli attacchi man-in-the-middle.
— aef

1
In realtà, questo è spesso esattamente quello che vuoi fare. Hai un repo interno. Se qualcuno è riuscito a falsificarlo, allora sei nei guai. Non è affatto "molto rischioso". In effetti, quanto spesso esegui un controllo fuori banda della chiave host? (Dovresti).
— Graham Nicholls

Risposte:


47

Aggiungili al tuo ~/.ssh/config:

Host host
    HostName host
    User user
    SshOption1 Value1
    SshOption2 Value2

La Hostvoce è ciò che specificherai sulla riga di comando e HostNameil vero nome host. Possono essere uguali o la Hostvoce può essere un alias. La Uservoce viene utilizzata se non viene specificata user@nella riga di comando.

Se è necessario configurarlo sulla riga di comando, impostare la GIT_SSHvariabile di ambiente in modo che punti a uno script con le proprie opzioni al suo interno.


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

28
Usa la GIT_SSHvariabile d'ambiente.
— Josh Lee

152

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 user@host

$GIT_SSH_COMMANDha la precedenza su $GIT_SSHe viene interpretato dalla shell, che consente di includere argomenti aggiuntivi.


Dovrebbe esserci una nuova riga prima git cloneo il codice è corretto?
— Tomáš Zato - Ripristina Monica il

7
Questo dovrebbe essere corretto, senza la nuova riga la variabile dovrebbe essere impostata per il seguente comando. Se aggiungi una nuova riga, dovresti esportare la variabile, quindi dovrebbe funzionare anche.
— Boris

Grazie, sono stato bloccato su questo per 2 giorni!
— James Gentes,

Booya! Grazie.
— Jasper Blues

non funzionerà con la versione git 1.9 credo, esiste una soluzione alternativa per git 1.9
— lazarus

33

Un'altra opzione fatta per specificare chiavi diverse è git config core.sshCommandcon git 2.10 + (Q3 2016).

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

Vedere commit 3c8ede3 (26 giugno 2016) di Nguyễn Thái Ngọc Duy ( pclouds) .
(Fuso da Junio ​​C Hamano - gitster- in commit dc21164 , 19 luglio 2016)

È core.sshCommandstata aggiunta una nuova variabile di configurazione per specificare quale valore per GIT_SSH_COMMAND utilizzare per repository.

Simile a $GIT_ASKPASSo $GIT_PROXY_COMMAND, leggiamo prima dal file di configurazione e poi torniamo a $GIT_SSH_COMMAND.

Questo è utile per selezionare diverse chiavi private mirate allo stesso host (es. Github)

core.sshCommand:

Se questa variabile è impostata, git fetche git pushutilizzerà il comando specificato invece di sshquando devono connettersi a un sistema remoto.
Il comando ha la stessa forma della GIT_SSH_COMMANDvariabile di ambiente e viene sovrascritto quando la variabile di ambiente è impostata.

Significa che git clonepuò 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 applicarlo a tutti i repository , come aggiunge user1300959 nei commenti , si utilizzerà una configurazione globale.

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

2
È più probabile che tu non abbia ancora un repository, dal momento che lo hai git clone- in questo caso potresti voler configurare il comando git ssh a livello globale:git config --global core.sshCommand ...
— iurii

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

Questa è la migliore risposta.
— MikeSchinkel

Nell'ultima parte manca apostrofo
— Luigi Lopez

@LuigiLopez Puoi modificare la risposta? Rivedrò la tua modifica.
— VonC

22

Ecco un esempio complicato su come passare gli argomenti ssh utilizzando la 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 user@host

Nota: le righe sopra sono le righe di comando del terminale che dovresti incollare nel tuo terminale. Creerà un file ssh , lo renderà eseguibile e lo eseguirà.

Se desideri passare l'opzione della chiave privata, controlla Come dire a git quale chiave privata usare? .


Bello! Domanda: Entrambi $*e "$@"sembrano funzionare. Normalmente lo uso "$@", poiché l'altro sembra deprecato. C'è un motivo per preferire $*in questo caso?
— mh8020

16

Configurazione a livello di repository senza influire sulle impostazioni a livello di sistema

Consolidando le risposte già disponibili, scelgo i passaggi seguenti. Ciò garantisce che le modifiche alla configurazione non influiscano a livello di macchina, ma solo per il repository su cui si sta lavorando. Questo è necessario nel mio caso poiché il mio script deve essere eseguito su un agente Bamboo condiviso.

1.Clone il repository adottando l' GIT_SSH_COMMANDapproccio.

GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone ssh://url

2.Una volta clonato, accedere alla directory del repository.

cd repo-dir

3.Impostare la core.sshCommandconfigurazione in modo che tutte le chiamate future possano essere eseguite semplicemente con i comandi git come al solito, ma consumando internamente le opzioni git fornite.

git config core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

1
Buon uso di core.sshCommandquello che ho menzionato sopra. Votato.
— VonC

5

Penso che l'aggiornamento di git a una versione> = 2.3 e l'uso GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone user@hostsia l'opzione di scommessa, ma se non è possibile, @ josh-lee ha dato una buona opzione, ma per favore, aggiorna la tua risposta indentando il file di configurazione ssh.

Host host
    HostName host
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

0

Questo problema è stato risolto eseguendo i passaggi seguenti nella macchina Windows: -

  • Crea il file di configurazione nella cartella C: \ Users \ username.ssh.

  • aggiungere la seguente riga a un file di configurazione.

    host <HOST>
    hostname <HOSTNAME>
    user <USER_NAME>
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes
    port <PORT_NUMBER>
    KexAlgorithms +diffie-hellman-group1-sha1
    
  • quindi riprova.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.