Ho clonato il mio repository git su ssh. Quindi, ogni volta che comunico con il master di origine spingendo o tirando, devo inserire nuovamente la mia password. Come posso configurare git in modo da non dover inserire la mia password più volte?
Ho clonato il mio repository git su ssh. Quindi, ogni volta che comunico con il master di origine spingendo o tirando, devo inserire nuovamente la mia password. Come posso configurare git in modo da non dover inserire la mia password più volte?
Risposte:
ssh-add
, devi ssh-agent
essere in esecuzione e tenere la tua chiave privata(Ok, rispondendo alla domanda aggiornata, per prima cosa corri ssh-keygen
per generare una chiave pubblica e privata come spiegato da Jefromi . Metti la chiave pubblica sul server. Dovresti usare una passphrase, se non hai l'equivalente di una semplice -testo password nella tua chiave privata. Ma quando lo fai, allora hai bisogno di una questione pratica come spiegato di seguito.)ssh-agent
Si desidera eseguire ssh-agent
in background mentre si accede. Una volta effettuato l'accesso, l'idea è di eseguire ssh-add
una e una sola volta, al fine di fornire all'agente la passphrase, per decodificare la chiave. L'agente si trova quindi nella memoria con la chiave sbloccata e caricata, pronta per l'uso ogni volta che vai da qualche parte.
Tutti i comandi 1 della famiglia ssh consulteranno quindi l'agente e saranno automaticamente in grado di utilizzare la chiave privata.
Su sistemi OSX (err, macOS ), GNOME e KDE, ssh-agent
viene di solito lanciato automaticamente per te. Esaminerò i dettagli nel caso in cui, come me, hai anche un Cygwin o un altro ambiente Windows in cui questo sicuramente non è fatto per te.
Inizia da qui: man ssh-agent
.
Esistono vari modi per eseguire automaticamente l'agente. Come spiegato nella pagina man, è possibile eseguirlo in modo che sia un genitore di tutti gli altri processi della sessione di accesso. In questo modo, le variabili di ambiente che fornisce saranno automaticamente in tutte le tue shell. Quando (in seguito) invocherai ssh-add
o ssh
entrambi avrai accesso all'agente perché tutti hanno le variabili di ambiente con nomi di socket magico o altro.
In alternativa, è possibile eseguire l'agente come un bambino normale, salvare le impostazioni dell'ambiente in un file e sorgente quel file in ogni shell all'avvio.
I miei sistemi OSX e Ubuntu eseguono automaticamente la configurazione di avvio dell'agente, quindi tutto ciò che devo fare è eseguire ssh-add
una volta. Prova a eseguire ssh-add
e vedi se funziona, in tal caso, devi solo farlo una volta per riavvio.
Il mio sistema Cygwin doveva farlo manualmente, quindi l'ho fatto nel mio .profile
e ho .bashrc
fonte .profile
:
. .agent > /dev/null
ps -p $SSH_AGENT_PID | grep ssh-agent > /dev/null || {
ssh-agent > .agent
. .agent > /dev/null
}
Il .agent
file viene creato automaticamente dallo script; contiene le definizioni delle variabili d'ambiente e le esportazioni. Quanto sopra tenta di generare il file .agent, quindi cerca ps(1)
l'agente. Se non funziona, avvia un agente e crea un nuovo file agente. Puoi anche solo eseguire ssh-add
e se fallisce avviare un agente.
sudo
con l'estensione pam corretta.
ssh-agent
suo probabilmente è più ordinato da usare:eval `ssh-agent`
Ho avuto un problema simile con GitHub perché stavo usando il protocollo HTTPS. Per verificare quale protocollo stai utilizzando, esegui
git config -l
e guarda la linea che inizia con remote.origin.url
. Per cambiare il protocollo
git config remote.origin.url git@github.com:your_username/your_project.git
Permission denied
errore.
git remote set-url origin git@github.com:your_username/your_project.git
Si tratta di configurare ssh, non git. Se non l'hai già fatto, dovresti usare ssh-keygen
(con una passphrase vuota) per creare una coppia di chiavi. Quindi, si copia la chiave pubblica nella destinazione remota con ssh-copy-id
. A meno che tu non abbia bisogno di più chiavi (ad es. Una più sicura con una passphrase per altri scopi) o di avere qualcosa di strano a identità multipla in corso, è così semplice:
ssh-keygen # enter a few times to accept defaults
ssh-copy-id -i ~/.ssh/id_rsa user@host
Modifica: dovresti davvero leggere la risposta di DigitalRoss, ma: se usi le chiavi con passphrase, dovrai usarle ssh-add <key-file>
per aggiungerle ssh-agent
(e ovviamente avviare un ssh-agent
se la tua distribuzione non ne ha già una in esecuzione per te).
ssh-agent
come vuole evitare il problema di inserire la passphrase ogni volta. Non sottovalutare, ma penso che tu debba migliorare questa risposta, a meno che non sia io quello che ha frainteso ...
ssh-agent
. +1 a te!
ssh-*
chiama la passphrase necessaria per utilizzare la chiave - dove intendevi veramente la tua vera password utente sul telecomando?
Se hai clonato usando HTTPS (consigliato), allora: -
git config --global credential.helper cache
e poi
git config --global credential.helper 'cache --timeout=2592000'
timeout = 2592000 (30 giorni in secondi) per abilitare la memorizzazione nella cache per 30 giorni (o qualunque altra suite).
Ora esegui un semplice comando git che richiede il tuo nome utente e password.
Inserisci le tue credenziali una volta e ora la memorizzazione nella cache è abilitata per 30 giorni.
Riprova con qualsiasi comando git e ora non hai bisogno di credenziali.
Per maggiori informazioni: - Memorizzazione nella cache della password di GitHub in Git
Nota : è necessario Git 1.7.10 o versione successiva per utilizzare l'helper delle credenziali. Al riavvio del sistema, potrebbe essere necessario inserire nuovamente la password.
Estendere i pensieri di Muein per coloro che preferiscono modificare i file direttamente tramite i comandi in esecuzione in git-bash o terminal.
Vai alla directory .git del tuo progetto (root del progetto sul tuo computer locale) e apri il file 'config'. Quindi cerca [remote "origin"] e imposta la configurazione dell'URL come segue:
[remote "origin"]
#the address part will be different depending upon the service you're using github, bitbucket, unfuddle etc.
url = git@github.com:<username>/<projectname>.git
Penso che ci siano due cose diverse qui. Il primo è che la normale autenticazione SSH richiede che l'utente inserisca la password dell'account (in cui la password dell'account verrà autenticata con metodi diversi, a seconda della configurazione di sshd).
Puoi evitare di inserire quella password usando i certificati. Con i certificati devi comunque inserire una password, ma questa volta è la password della tua chiave privata (indipendente dalla password dell'account).
Per fare ciò puoi seguire le istruzioni indicate da steveth45:
Con autenticazione con chiave pubblica .
Se vuoi evitare di inserire la password del certificato ogni volta, puoi usare ssh-agent, come sottolineato da DigitalRoss
Il modo esatto in cui lo fai dipende da Unix vs Windows, ma essenzialmente devi eseguire ssh-agent in background quando esegui l'accesso, quindi la prima volta che esegui l'accesso, esegui ssh-add per fornire all'agente la tua passphrase. Tutti i comandi della famiglia ssh consulteranno quindi l'agente e raccoglieranno automaticamente la passphrase.
Inizia qui: man ssh-agent.
L'unico problema di ssh-agent è che, almeno su * nix, è necessario inserire la password dei certificati su ogni nuova shell. E quindi il certificato viene "caricato" e puoi usarlo per autenticarti su un server SSH senza inserire alcun tipo di password. Ma questo è su quel particolare guscio.
Con il portachiavi puoi fare la stessa cosa di ssh-agent ma "a livello di sistema". Una volta acceso il computer, si apre una shell e si inserisce la password del certificato. E poi, ogni altra shell utilizzerà quel certificato "caricato" e la tua password non verrà mai più richiesta fino al riavvio del PC.
Gnome ha un'applicazione simile, chiamata Gnome Keyring che richiede la password del tuo certificato la prima volta che lo usi e poi lo memorizza in modo sicuro, così non ti verrà chiesto di nuovo.
AddKeysToAgent yes
in .ssh / config. Quindi viene caricato nella memoria fino a quando non si spegne il computer
Se stai usando github, hanno un tutorial molto carino che lo spiega più chiaramente (almeno per me).
ssh-keygen -t rsa
Quando ti viene richiesta una passphrase, lasciala vuota, cioè premi semplicemente invio. così semplice!!
Prova questo dalla casella da cui stai spingendo
ssh git@github.com
Dovresti quindi ottenere una risposta gradita da github e andrà bene poi spingere.
Hi gkucmierz! You've successfully authenticated, but GitHub does not provide shell access.
Ma in qualche modo git mi chiede ancora la password quando provo a spingere
Ho dovuto clonare un repository git da un server che non consentiva l'accesso tramite chiave ssh ma solo con un utente / password. Non ho trovato alcun modo per configurare il plug-in Git in modo da utilizzare una semplice combinazione utente / password, quindi ho aggiunto il seguente comando shell come passo pre-build su una macchina build linux che dipende dallo strumento previsto (apt-get install prevedono):
QUESTO NON È UN BUON MODO DI RISOLVERE QUESTO PROBLEMA COME LA TUA PASSWORD È INDICATA COME TESTO CHIARO NELLA CONFIGURAZIONE E NEI REGISTRI DEL LAVORO JENKINS! UTILIZZARLO SOLO SE NON È POSSIBILE CONFIGURARE L'AUTENTIFICAZIONE DI RSA-KEY O ALTRE POSSIBILITÀ DI CONFIGURAZIONE!
rm -rf $WORKSPACE &&
expect -c 'set timeout -1; spawn git clone USER@MYHOST:/MYPATH/MYREPO.git $WORKSPACE; expect "password:" {send "MYPASSWORD\r"}; expect eof'
Aggiungi una sola riga AddKeysToAgent yes
nella parte superiore del file .ssh / config. Ofcourse ssh-agent deve essere in esecuzione in anticipo. Se non è in esecuzione (controllare da prep ssh-agent
), quindi semplicemente eseguirloeval $(ssh-agent)
Ora, la chiave viene caricata in tutto il sistema nella memoria e non è necessario digitare nuovamente la passphrase.
La fonte della soluzione è /ubuntu/362280/enter-ssh-passphrase-once/853578#853578
Sto cercando di evitare di digitare sempre la passphrase anche perché sto usando ssh su Windows. Quello che ho fatto è stato modificare il mio file .profile, in modo da inserire il mio passphrase in una determinata sessione. Quindi questo è il pezzo di codice:
SSH_ENV="$HOME/.ssh/environment"
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
ssh-agent | sed 's/^echo/#echo/' > "$SSH_ENV"
echo succeeded
chmod 600 "$SSH_ENV"
. "$SSH_ENV" > /dev/null
ssh-add
}
# test for identities
function test_identities {
# test whether standard identities have been added to the agent already
ssh-add -l | grep "The agent has no identities" > /dev/null
if [ $? -eq 0 ]; then
ssh-add
# $SSH_AUTH_SOCK broken so we start a new proper agent
if [ $? -eq 2 ];then
start_agent
fi
fi
}
# check for running ssh-agent with proper $SSH_AGENT_PID
if [ -n "$SSH_AGENT_PID" ]; then
ps -fU$USER | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
if [ $? -eq 0 ]; then
test_identities
fi
# if $SSH_AGENT_PID is not properly set, we might be able to load one from
# $SSH_ENV
else
if [ -f "$SSH_ENV" ]; then
. "$SSH_ENV" > /dev/null
fi
ps -fU$USER | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
if [ $? -eq 0 ]; then
test_identities
else
start_agent
fi
fi
quindi con questo scrivo la mia passphrase una volta in una sessione ..
Ho provato tutti questi suggerimenti e altro, solo per poter clonare dalla mia istanza AWS. Niente ha funzionato. Alla fine ho tradito la disperazione: ho copiato il contenuto di id_rsa.pub sul mio computer locale e l'ho aggiunto a ~ / .ssh / known_hosts sulla mia istanza AWS.