2016-06-07 14 views
9

E 'possibile accedere a (fetch/push) un repository remoto usando ssh e un file di identità (con la chiave privata) senza aggiungendo una voce nel file ~/.ssh/config come ad esempio:Git: accedere a un repository remoto su ssh utilizzando un file chiave ma senza usare ~/.ssh/config

Host tingle 
    HostName 111.222.333.444 
    User git 
    IdentityFile c/tmp/my_id_rsa 

Tutto funziona bene quando si configura il file ~/.ssh/config. Comunque abbiamo uno script che clona da un repo remoto, controlla, inizia a testare, commette risultati e li spinge. Lo script deve essere eseguito su qualsiasi macchina senza toccare il file di configurazione ssh.

+0

Potresti creare un file di configurazione personalizzato con quello che hai sopra che è usato solo dove ti serve (ad esempio 'ssh tingle -F my_custom_config')? – Ownaginatious

+0

Questa risposta potrebbe essere utile. Mi sono imbattuto in esso mentre cercavo qualcosa di simile all'inizio di questa settimana. http://stackoverflow.com/a/4565746/1789724 – austin

+0

Controlla il post qui: > http://stackoverflow.com/questions/7927750/specify-an-ssh-key-for-git-push-for-a -given-domain – prateek05

risposta

4

Si poteva ignorare la variabile di ambiente $GIT_SSH di utilizzare la propria chiave privata:

In primo luogo, creare uno script wrapper. Prendiamo per scontato che noi chiamiamo gitssh.sh:

#!/bin/bash 
ssh -i /path/to/mykey "[email protected]" 

Poi, punto $GIT_SSH ad esso:

export GIT_SSH=/path/to/gitssh.sh 

Ora, ogni volta che si esegue un comando git tramite ssh, esso sarà sostituito con questo script, e riferimenti tua chiave.

6

È possibile utilizzare la variabile $GIT_SSH, vedere documentation, per impostare un programma che viene richiamato anziché ssh.

In questo modo è possibile, ad es. fanno GIT_SSH=/my/own/ssh git clone https://my.own/repo.git

adeguare il contenuto degli /my/own/ssh al proprio bisogno, per es .:

#!/bin/bash 
# Wrapper for ssh, to use identity file and known hosts file 
exec /usr/bin/ssh -i /my/own/identity_file-o UserKnownHostsFile=/my/own/hosts.file "[email protected]" 

Per quanto ne so questo è attualmente l'unico modo per fare questo senza manipolazioni percorso piuttosto disordinato.

+1

Questo funziona. Particolarmente utile se il nostro script crea un proprio file di configurazione host e aggiunge al wrapper: exec/usr/bin/ssh - F our_ssh_host "$ @" –

3

Il seguente dovrebbe fare il trucco

GIT_SSH_COMMAND="ssh -i c/tmp/my_id_rsa" git push 

Ciò consente di aggiungere parametri per l'esecuzione ssh senza la necessità di un file di script aggiuntivo.

A seconda del vostro script è possibile regolare con precisione questo definendo ed esportando la variabile d'ambiente GIT_SSH_COMMAND prima dell'esecuzione effettiva di git o utilizzare if ecc da utilizzare solo quando si comunica con tingle

nel file di configurazione menzioni utente e host. Questo dovrebbe già essere parte della definizione remota git. Se è ancora necessario eseguire l'override di questo, è possibile aggiungerli alla definizione di comando precedente.

Una osservazione il comando precedente non sta controllando quale host in realtà viene invocato da git. Ma se sei disperato potresti provare a creare uno script di shell inline con questo "trucco" che controlla il nome host e imita la restrizione dell'host del file di configurazione ;-).

Come antipasto che avrebbe forse simile a questa: GIT_SSH_COMMAND="bash -c \"if [ \\\"$1\\\" = \\\"[email protected]\\\" ] ; then ssh -i c/tmp/my_id_rsa [email protected] ; else ssh [email protected] ; fi \" -- " git push

non ho la prova questo ed essere consapevoli di citare ;-). È per i disperati.

2

Se si desidera utilizzare uno ssh personalizzato chiave si può provare con questo:

ssh-agent bash -c 'ssh-add /path/to/your/id_rsa; git clone [email protected]:repo' 

In questo modo non è necessario di scrivere/modificare qualsiasi file di configurazione o modificare il tuo ambiente.

-1

È possibile utilizzare il file .pem per creare una connessione sicura con il server git

ssh -i "yourfile.pem" yourHostName.com

.pem non è altro che come un file di certificato che ha le informazioni chiave.

  • Il primo passo è generare coppia di chiavi e file PEM.
  • Il passo successivo è caricare il certificato sul server remoto nella riga di comando utilizzando SSH, la prima volta con la password.
  • Ultimo passo, testare il client di connessione al server senza utilizzare una password.

Check out http://www.beginninglinux.com/home/server-administration/openssh-keys-certificates-authentication-pem-pub-crt! qui puoi trovare maggiori dettagli sul metodo.

Problemi correlati