Wprowadź hasło SSH jeden raz


124

Przed aktualizacją

Kiedy uruchomiłem git clone git@...(używając ssh) raz na komputer ponownie, pojawiło się okno dialogowe zawierające pole tekstowe do wstawienia mojego hasła SSH i potwierdzone OK. Wówczas hasło nie było już wymagane do następnego uruchomienia mojego systemu.

Po aktualizacji do 13.10

Po aktualizacji do Ubuntu 13.10 to okno już się nie pojawia, ale pojawia się komunikat w terminalu:

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

... za każdym razem, gdy klonujesz repozytorium git, pojawia się.

Jak mogę to naprawić? Chcę wprowadzić moje hasło tylko raz.


1
Myślę, że musisz do tego użyć ssh-addpolecenia. Próbowałeś tego?
devius

2
Próbowałem ssh-agent bash+ ssh-add. Działa to tylko przez kilka minut.
Ionică Bizău

W końcu mam ten sam problem. Myślę, że może to być konflikt między agentem ssh OpenSSH a demonem Gnome Keyring.
devius


2
Dodaj AddKeysToAgent yesdo .ssh / config działa dla mnie.
xslittlegrass

Odpowiedzi:


138

Aktualizacja: wydaje się być błędem od 13.10:

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


W każdym razie po uruchomieniu następujących poleceń problem został dla mnie naprawiony:

Jak naprawić

Naprawiłem to, wprowadzając następujące polecenia:

$ ssh-agent bash

To tworzy nowy proces bash, który pozwala dodawać klucze prywatne. Podczas dodawania nowego klucza prywatnego zostaniesz poproszony o podanie hasła tylko raz.

I wtedy:

$ 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)

... gdzie usernamejest twoja nazwa użytkownika. Możesz zrobić to samo, używając $USERzmiennej:

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

Alternatywnie, po prostu użyj ~dla swojego katalogu domowego.

$ ssh-add ~/.ssh/id_rsa

Problem został naprawiony.


47
To wcale nie rozwiązuje problemu. Dodaje tylko tożsamość do agenta, dopóki nie wyjdziesz z terminala. Jeśli otworzysz nowy terminal, musisz ssh-addponownie.
devius

@devius Tak, wydaje się być błędem. Ale powyższe polecenia naprawiły mój problem ...
Ionică Bizău,

3
Aby wyjaśnić: dzięki tej „poprawce” nie będziesz musiał ponownie wpisywać hasła w tym terminalu. W momencie, gdy otworzysz nowy terminal - będziesz musiał ponownie podać hasło.
harijay

9
Próbowałem $ ssh-add /home/username/.ssh/id_rsa(bez ssh-agent bash) i zadziałało to nawet po ponownym otwarciu terminala. Ale kompletnym rozwiązaniem dla mnie był ten jeden stackoverflow.com/a/4246809/532252 . Wszystko jest w porządku, nawet po ponownym uruchomieniu komputera.
kishie

1
Właśnie wpisałem ssh-add w terminalu. Nie ma potrzeby przełączania się na bash ssh-agent lub określania pliku
id_rsa

39

0) Krótka odpowiedź

Dodaj w .ssh/configjednym wierszu na początku:

AddKeysToAgent yes

i uruchom git / ssh / ... Jeśli to nie wystarczy, sprawdź wersję ssh i sprawdź, czy ssh-agent jest załadowany tymi instrukcjami:

1) Sprawdź wersję openssh

Najpierw sprawdź, czy twoja wersja ssh musi być większa lub równa 7.2 :

ssh -V

2) Edytuj plik konfiguracyjny

Jeśli tak jest, po prostu dodaj .ssh/configna początku jedną linię:

AddKeysToAgent yes

3) Sprawdź, czy ssh-agent jest już otwarty

Zwykle dystrybucje automatycznie ładują agenta ssh. Aby to sprawdzić, uruchom

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

Jeśli nie widzisz żadnej linii, która go zawiera, musisz go załadować, uruchamiając:

eval $(ssh-agent)

Zauważ, że włącza to agenta tylko na bieżącym terminalu, więc aby włączyć go wszędzie, możesz spróbować dodać tę linię do ~/.profilepliku i zrestartować komputer.


11
AddKeysToAgent yesto kanoniczna odpowiedź po 2016 r. - i dokładnie to , o co głoszą większość współczesnych użytkowników. Jest połowa 2017 roku. Ubuntu> = 16.04 ( Xenial Xerus ) jest teraz rozsądnym założeniem. Większość otwartych instalacji OpenSSH obsługuje teraz tę opcję. Kludges skryptów powłoki ad-hoc, które są zalecane przez każdą inną odpowiedź na to pytanie, są takie ... passé . </sigh>
Cecil Curry

2
To powinna być zaakceptowana odpowiedź
simernes

32

Ten dokument Atlassian naprawił dla mnie problem w Ubuntu 14.04 Server Edition:

Po prostu dodaj te wartości do swojego .bashrcpliku:

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

Po zalogowaniu pyta o hasło tylko raz i buforuje. Nie musisz go wprowadzać za każdym razem.


2
Wydaje się, że działa to na inne dystrybucje, tak jak z powodzeniem użyłem tej odpowiedzi w Sabayon Linux.
BH2017,

1
Dzięki! To rozwiązanie działało dla mnie w systemie Ubuntu, w którym demon gnome-keyring nie działał z powodu problemów z dbus-demonem. W szczególności otrzymywałem te błędy ”** Komunikat: nie można połączyć się z magistralą sesji dbus: Nie można automatycznie uruchomić demona dbus bez $ DISPLAY dla X11” i po ustawieniu zmiennej środowiskowej wyświetlania dostałem „** Komunikat: nie mogłem nie można połączyć się z magistralą sesji dbus: // bin / dbus-launch zakończyło się nieprawidłowo z następującym błędem: Błąd automatycznego uruchamiania: inicjalizacja X11 nie powiodła się. "
user207863

1
To wymaga więcej pozytywnych opinii, rozwiązuje problem zwirtualizowanej wersji systemu Ubuntu 16.04 w porządku.
Niels Keurentjes

3
To rozwiązuje problem również dla mnie w Bash dla Windows. Próbowałem uruchomić Bash wiele razy i pamiętało to hasło. Nie próbowałem jeszcze restartu.
Amr

2
po wypróbowaniu wszystkich innych rozwiązań, zadziałało to dla mnie. To powinno być rozwiązanie OP
João Pimentel Ferreira

20

Obejściem tego błędu jest dodanie następujących elementów na dole~/.bashrc

eval `gnome-keyring-daemon --start`

2
Czy breloczek do gnome nie powinien być częścią twojej sesji?
Pavel Šimerda

1
Jeśli mówisz o „powinien”, to pytanie nie powinno być tutaj na pierwszym miejscu, jeśli wszystko jest tak idealne
Anwar

1
Nie jestem pewien, czy to należy do .bashrc. Wygląda na to, że musisz dodać go do pliku profilu DE
Dmitry Ginzburg,

3

Użytkownicy skorupy ryb mogą użyć tego skryptu, aby zrobić to samo.

# 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

Używam tego:

vim ~/.profile

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

0

Jeśli używasz lazurowego pliku .ppk

Wystarczy przekonwertować go na pem i dodać uprawnienie 400 za pomocą prostych kroków:

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

W systemie Ubuntu 18.04 ssh-agent jest uruchamiany po otwarciu sesji X, jest zarządzany w pliku /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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.