Domanda

Ho installato con successo e configurato msysgit portatile sul mio flash drive, e lo hanno utilizzato per tirare e spingere pronti contro termine GitHub. Tuttavia, mi sembra di avere sempre a kludge il supporto SSH.

In particolare, al fine di SSH per trovare i miei file di chiave, devo seguire queste istruzioni per avviare una seconda istanza di ssh-agent e poi ssh-add mia chiave ogni volta che corro git-bash.bat.

Utilizzando l'output di ssh -v git@github.com eseguire il debug vedo che msysgit default è la mia directory utente di Windows per cercare le chiavi. Non può farlo; Ho bisogno di guardare nella propria directory sul disco rigido portatile.

Come posso forzare $ HOME per essere propria cartella del programma?

Aggiornamento per collegamento Vox rotto

Le istruzioni da questa pagina simili al Ora- link interrotto originariamente ho postato. Citato in basso. qui è anche la WebArchive dell'originale Vox articolo .

  

Tuttavia, se si tenta di questa e ottenere:

% ssh-add
Could not open a connection to your authentication agent. 
     

quindi la sessione non è in esecuzione con l'ssh-agent. È possibile aggirare il problema riavviando una nuova shell sotto l'agente eseguendo:

exec ssh-agent bash 
     

dove è possibile sostituire bash con il guscio di vostra scelta. Una volta fatto questo, si dovrebbe essere in grado di eseguire ssh-add per caricare la chiave per quel guscio.

È stato utile?

Soluzione

Il comando usato per lanciare bash Git è:

C:\Windows\SysWOW64\cmd.exe /c ""C:\Prog\Git\1.7.1\bin\sh.exe" --login -i"

Ho appena provato quanto segue in una sessione DOS:

C:\>C:\Windows\SysWOW64\cmd.exe /c ""C:\Prog\Git\1.7.1\bin\sh.exe" --login -i"
VonC@XXX /c/
$ echo $HOME
/c/Users/VonC

Per impostazione predefinita, $ HOME $% HOMEPATH%, ma se la forza% HOME%:

set HOME=/another/path

e poi lanciare la stessa sessione bash:

C:\>C:\Windows\SysWOW64\cmd.exe /c ""C:\Prog\Git\1.7.1\bin\sh.exe" --login -i"
VonC@XXX /c/
$ echo $HOME
/another/path

Quindi, se si avvolge la chiamata da uno script bash impostando HOME per:

  • %~dp0: il percorso della involucro sulla vostra chiave USB
  • o %~d1\your\path: con %~d1 essendo la lettera di unità (della vostra chiave USB Se il wrapper è su di esso)

, si dovrebbe essere in grado di forza HOME per qualsiasi valore è necessario.


Nota (novembre 2011): da allora, l'OP dgw ha scritto il suo proprio involucro :

git-bash-portable.bat:

@echo off
rem Copyright (C): 2010 Voyagerfan5761
rem http://technobabbl.es/

set USERPROFILE=%~dp0
set HOMEDRIVE=%~d0
set HOMEPATH=%~p0
set HOME=%~dp0
set HISTFILE=%USERPROFILE%.bash_history
rem set BASHRC=%USERPROFILE%.bashrc

git-bash.bat

L'articolo " portatile Git per Windows: l'impostazione del $HOME variabile d'ambiente per consentire la portabilità completa (comprese le chiavi SSL e la configurazione per l'utilizzo con GitHub) " anche aggiungere informazioni utili.

  

Tuttavia, se si installa Git in un'unità portatile, ti consigliamo le impostazioni di viaggiare con l'installazione, che ovviamente saranno non se è alla ricerca di loro in una cartella che non può esistere su altri computer.

     

Quindi, quello che dobbiamo fare è dire Portable Git per il trattamento di una posizione specifica all'interno della propria cartella come cartella home; in questo modo siamo in grado di copiare l'intera cartella Git ovunque ci piace e le impostazioni viaggeremo con esso.

Altri suggerimenti

Impostazione della directory home

La soluzione con un wrapper git-bash-portable.bat apre un'altra finestra di Windows CMD per me che rimane in background.

Un altro, la soluzione più originario è quello di regolare /etc/profile e impostare la Home Var lì. Basta aggiungere le seguenti righe alla fine del /etc/profile, myuser beeing il tuo virtual nome utente:

# end of /etc/profile
export HOME="/home/myuser"
cd

Questo imposta la corretta directory HOME e cd in esso. Poi il meccanismo di avviamento, come il caricamento di tutti i file da /etc/profile.d funziona correttamente e si può lanciare git-bash.exe con un doppio clic.

Naturalmente è necessario creare la directory home per questo al lavoro. Inizio git-bash e crearlo:

mkdir -p /home/myuser

Avvio o ricollegare all'agente

Per quanto riguarda l'agente, essa deve normalmente essere ricaricato con ogni shell git-bash aperto. Una soluzione per ottenere un agente indipendente che abbracciano tutte le finestre git-bash è quello di includere il seguente piccolo ~/.mgssh script nella startup. Memorizza l'agente env vars in un agent.env file nella directory .ssh. Qualsiasi nuova shell legge il file, controlla se l'agente è ancora in corso e si collega ad esso. Se non è in esecuzione si avvia l'agente e riscrive il file agent.env. Assicurati che il tuo dir .ssh esiste.

# cat ~/.mgssh

agentfile=~/.ssh/agent.env

agent_load_env()
{
  test -f "$agentfile" && . "$agentfile" >| /dev/null;
}

agent_start()
{
  (umask 077; ssh-agent >| "$agentfile")
  . "$agentfile" >| /dev/null;
}

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
fi

# uncomment this, if you want to add a key on agent startup
#if [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
#    ssh-add
#fi

unset agentfile

Ora di risalire allo script .mgssh nel .bashrc:

# cat .bashrc
. ~/.mgssh

# ... more .bashrc content

Ho trovato questo su GitHub:

https: //help.github. com / articoli / lavoro-con-ssh-passphrase-chiave / # piattaforma-finestre

Uccidere l'agente prima della rimozione del bastone

Di solito, prima di rimuovere il tuo usbstick si chiede di Windows per di espulsione il bastone, facendo clic destro nel Explorer o utilizzando la piccola icona systray. Questo non funziona, se il vostro agente è ancora attivo e funzionante. Assicurati di uccidere l'agente prima di chiudere l'ultima shell al momento della rimozione bastone:

$ ssh-agent -k

unset SSH_AUTH_SOCK;
unset SSH_AGENT_PID;
echo Agent pid 8472 killed;

Nota: Di solito si usa eval $(ssh-agent -k) per disinserire l'env vars pure, ma come si fa questo appena prima di chiudere la shell è irrilevante. Quanto sopra script di avvio .mgssh si occupa di ripulire il file ~/.ssh/agent.env in modo che non deve essere fatto sia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top