2012-09-06 12 views
5

ho un repository git che io tiro utilizzando un percorso simile a questo:GitExtensions + Putty tramite SSH sulla porta personalizzata

git pull ssh://[email protected]:1234/path/to/repository.git 

Quando GitExtensions poi cerca di tirare dal repo utilizzando plink, rende questa chiamata:

plink -T [email protected]:/path/to/repository.git 

Questo fallisce perché in realtà sta eseguendo il ping sulla porta # 22 e non # 1234.

La chiamata diritto di fare sarebbe

plink -T -P 1234 [email protected]:/path/to/repository.git 

Se creo un alias "hostCom" nel mio ~/.ssh/config, sembra funzionare correttamente (connessione a # 1234) se faccio e basta questo:

plink -T [email protected] 

Ma appena aggiungo il percorso per il repo git troppo, si va al # 22 di nuovo.

Un'altra opzione che ho provato è quella di creare una sessione in stucco, chiamiamola "hostPutty", e impostare la porta di default lì ecc. La linea di fondo finisce per essere la stessa però: non è possibile combinare il percorso di git repo con porta personalizzata.

Come si combinano tutte le parti per farle funzionare?

E come mai OpenSSH può affrontare il problema, ma Putty non può? L'unico problema con OpenSSH è che continua a chiedermi la password per la chiave privata ad ogni tentativo di connessione (e non voglio creare una chiave privata senza password).

risposta

9

Capito.

Ecco cosa mi ha fatto sulla strada sbagliata:

  • Non creare tutte le sessioni in mastice, come indicato here
  • Non utilizzare alias host potrebbe aver definiti in ~/.ssh/config

Ecco come farlo funzionare:

  • Ovviamente assicurarsi GitExtens ioni è impostato per utilizzare Putty, non OpenSSH
  • Assicurarsi plink.exe (quella disponibile con GitExtensions o specificamente installato con mastice) è in un percorso senza spazi
  • Impostare la% GIT_SSH variabile ENV% per puntare a plink. exe (potrebbe puntare a ssh.exe per impostazione predefinita), assicurarsi che non vi siano apostrofi poiché il valore verrà utilizzato "così com'è" (ecco perché non è possibile utilizzare gli spazi come indicato sopra)
c:\>echo %GIT_SSH% 
    C:\tools\PuTTY\plink.exe 
  • Usa il comando "completo" per estrarre, nessun alias host che ti permetta di non specificare la porta ecc., Nell'esempio sopra. Se manca la porta e ci sono solo due punti, Git lo considera come un separatore di percorso e ssh come delimitatore di porta (in modo che mordano tutti piuttosto male).

    git clone ssh: //[email protected]: 1234/path/to/repository.git

Se lo fai Git + Plink effettivamente capire le cose a destra!

Se non si fa in questo modo, si potrebbe incorrere in tutti i tipi di problemi come:

  • avuto% GIT_SSH% indicò ssh.exe e utilizzati alias host invece di percorso incl. porto
ssh.exe": hostPutty:path: no address associated with name 
    fatal: The remote end hung up unexpectedly 
  • apostrofi utilizzato in% GIT_SSH%
error: cannot spawn "C:\tools\PuTTY\plink.exe": No such file or directory 
    fatal: unable to fork 
0

Per quanto mi riguarda, ho continuato a ottenere un errore che il nome host non esisteva. Dopo aver provato un sacco di suggerimenti su questo e altri thread, ho controllato il mio URL remoto e questo è stato il colpevole. Se si utilizza stucco, assicurarsi che inizia con [email protected] non https://github

Here's an examplpe of how to check this in git extensions

Problemi correlati