Immettere una passphrase SSH una volta


124

Prima dell'aggiornamento

Quando stavo correndo git clone git@...(usando ssh) una volta per riavvio del computer appariva una finestra di dialogo contenente una casella di testo per l'inserimento della mia passphrase SSH e confermata con OK. Quindi la passphrase non era più necessaria fino al prossimo avvio del mio sistema.

Dopo l'aggiornamento a 13.10

Dopo l'aggiornamento a Ubuntu 13.10 quella finestra non appare più ma appare un messaggio nel terminale:

Enter passphrase for key '/home/username/.ssh/id_rsa': 

... ogni volta che si clona un repository git questo appare.

Come posso risolvere questo problema? Voglio inserire la mia passphrase solo una volta.


1
Penso che devi usare il ssh-addcomando per quello. L'hai provato?
devius

2
Ho provato ssh-agent bash+ ssh-add. Funziona solo per pochi minuti.
Ionică Bizău,

Dopotutto sto avendo lo stesso problema. Penso che potrebbe essere un conflitto tra l'agente ssh di OpenSSH e il Gnome Keyring Daemon.
devius


2
Aggiungi AddKeysToAgent yesa .ssh / config funziona per me.
xslittlegrass,

Risposte:


138

Aggiornamento: sembra essere un bug dal 13.10:

https://bugs.launchpad.net/ubuntu/+source/libpam-ssh/+bug/1247169


Comunque eseguendo i seguenti comandi il problema è stato risolto per me:

Come risolvere

Ho risolto questo inserendo i seguenti comandi:

$ ssh-agent bash

Questo crea un nuovo processo bash che ti consente di aggiungere chiavi private. Quando si aggiunge una nuova chiave privata, verrà richiesta la passphrase una volta e una sola volta.

E poi:

$ ssh-add /home/username/.ssh/id_rsa
Enter passphrase for /home/username/.ssh/id_rsa: 
Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)

... dov'è il usernametuo nome utente. Puoi fare lo stesso usando la $USERvariabile:

$ ssh-add /home/$USER/.ssh/id_rsa

In alternativa, basta usare ~per la tua home directory.

$ ssh-add ~/.ssh/id_rsa

E il problema è stato risolto.


48
Questo non risolve affatto il problema. Aggiunge l'identità all'agente solo fino all'uscita dal terminale. Se apri un nuovo terminale devi farlo di ssh-addnuovo.
devius,

@devius Sì, sembra essere un bug. Ma i comandi sopra hanno risolto il mio problema ...
Ionică Bizău

3
Quindi, per chiarire: con questa "correzione" non dovrai solo digitare nuovamente la passphrase in quel terminale. Nel momento in cui apri un nuovo terminale, dovrai dare nuovamente la passphrase.
harijay,

9
Ho provato $ ssh-add /home/username/.ssh/id_rsa(senza ssh-agent bash) e ha funzionato per me anche dopo aver riaperto il terminale. Ma la soluzione completa per me era questa stackoverflow.com/a/4246809/532252 . Va tutto bene anche dopo aver riavviato la macchina.
Kishie,

1
Ho appena digitato ssh-add nel terminale. Non è necessario passare a ssh-agent bash o specificare un file
id_rsa

39

0) Risposta breve

Aggiungi la tua .ssh/configriga all'inizio:

AddKeysToAgent yes

ed esegui git / ssh / ... Se non è abbastanza, controlla la tua versione ssh e controlla che ssh-agent sia caricato con queste istruzioni:

1) Controlla la versione di openssh

Innanzitutto controlla che la tua versione ssh, deve essere maggiore di uguale a 7.2 :

ssh -V

2) Modifica il file di configurazione

In tal caso, aggiungi solo .ssh/configuna riga all'inizio:

AddKeysToAgent yes

3) Controlla se ssh-agent è già aperto

Di solito le distribuzioni caricano automaticamente un agente ssh. Per verificarlo, esegui

ps aux | grep -v grep | grep ssh-agent

Se non vedi alcuna riga che lo contiene, devi caricarlo eseguendo:

eval $(ssh-agent)

Nota che questo abilita l'agente solo sul terminale corrente, quindi per abilitarlo ovunque, puoi provare ad aggiungere questa linea nel tuo ~/.profilefile e riavviare.


11
AddKeysToAgent yesè la risposta canonica post-2016 - ed è esattamente ciò per cui la maggior parte degli utenti moderni sta cogliando. È la metà del 2017. Ubuntu> = 16.04 ( Xenial Xerus ) è ora un presupposto ragionevole. La maggior parte delle installazioni OpenSSH in natura supporta ora questa opzione. I kludges di script di shell ad hoc del tipo richiesto da ogni altra risposta a questa domanda sono così ... passati . </sigh>
Cecil Curry,

2
Questa dovrebbe essere la risposta accettata
simernes

32

Questo documento Atlassian ha risolto il problema su Ubuntu 14.04 Server Edition:

Aggiungi questi valori nel tuo .bashrcfile:

SSH_ENV=$HOME/.ssh/environment

# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}

if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi

E dopo aver effettuato l'accesso, richiede la password una sola volta e memorizza nella cache. Non è necessario inserirlo ogni volta.


2
Questo sembra funzionare su altre distro, come se avessi usato con successo questa risposta su Sabayon Linux.
BH2017,

1
Grazie! Questa soluzione ha funzionato per me su un sistema Ubuntu in cui il demone gnome-keyring non funzionava a causa di problemi di dbus-daemon. In particolare, ho visualizzato questi errori "** Messaggio: impossibile connettersi al bus di sessione dbus: impossibile avviare automaticamente un demone dbus senza $ DISPLAY per X11" e dopo aver impostato la variabile di ambiente di visualizzazione ho ricevuto "** Messaggio: couldn connettersi al bus di sessione dbus: // bin / dbus-launch è terminato in modo anomalo con il seguente errore: Errore di avvio automatico: inizializzazione X11 non riuscita. "
user207863,

1
Ciò ha bisogno di più voti, risolve bene il problema su Ubuntu 16.04 virtualizzato.
Niels Keurentjes,

3
Questo risolve il problema anche per me su Bash per Windows. Ho provato a lanciare Bash più volte e ha ricordato la passphrase. Non ho ancora provato a riavviare.
Amr

2
dopo aver provato tutte le altre soluzioni, questo ha funzionato per me. Questa dovrebbe essere la soluzione all'OP
João Pimentel Ferreira,

20

Una soluzione alternativa per questo errore consiste nell'aggiungere quanto segue in fondo a~/.bashrc

eval `gnome-keyring-daemon --start`

2
Il portachiavi di gnome non dovrebbe far parte della tua sessione?
Pavel Šimerda,

1
Se stai parlando di "dovrebbe", allora questa domanda non dovrebbe essere qui al primo posto, se tutto è così perfetto
Anwar

1
Non sono sicuro se questo appartiene .bashrc. Sembra che tu debba aggiungerlo in un file di profilo DE
Dmitry Ginzburg il

3

Gli utenti del guscio di pesce possono usare questo script per fare la stessa cosa.

# content has to be in .config/fish/config.fish
# if it does not exist, create the file
setenv SSH_ENV $HOME/.ssh/environment

function start_agent                                                                                                                                                                    
    echo "Initializing new SSH agent ..."
    ssh-agent -c | sed 's/^echo/#echo/' > $SSH_ENV
    echo "succeeded"
    chmod 600 $SSH_ENV 
    . $SSH_ENV > /dev/null
    ssh-add
end

function test_identities                                                                                                                                                                
    ssh-add -l | grep "The agent has no identities" > /dev/null
    if [ $status -eq 0 ]
        ssh-add
        if [ $status -eq 2 ]
            start_agent
        end
    end
end

if [ -n "$SSH_AGENT_PID" ] 
    ps -ef | grep $SSH_AGENT_PID | grep ssh-agent > /dev/null
    if [ $status -eq 0 ]
        test_identities
    end  
else
    if [ -f $SSH_ENV ]
        . $SSH_ENV > /dev/null
    end  
    ps -ef | grep $SSH_AGENT_PID | grep -v grep | grep ssh-agent > /dev/null
    if [ $status -eq 0 ]
        test_identities
    else 
        start_agent
    end  
end

0

Io uso questo:

vim ~/.profile

eval `/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh,gpg`
export SSH_AUTH_SOCK
export GPG_AGENT_INFO

0

Se si utilizza il file azzurro .ppk

Basta convertirlo in pem e aggiungere l'autorizzazione 400 con semplici passaggi:

sudo apt-get install putty
puttygen <path_to_key>/keyname.ppk -O private-openssh -o <path>/aws_key.pem
sudo chmod 400 <path>/aws_key.pem
ssh -vi aws_key.pem ubuntu@<ip_address>

0

Su Ubuntu 18.04, lo ssh-agent viene avviato all'apertura della sessione X, è gestito nel file /etc/X11/Xsession.options:

# cat /etc/X11/Xsession.options
# $Id: Xsession.options 189 2005-06-11 00:04:27Z branden $
#
# configuration options for /etc/X11/Xsession
# See Xsession.options(5) for an explanation of the available options.
allow-failsafe
allow-user-resources
allow-user-xsession
use-ssh-agent
use-session-dbus
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.