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.