Введите пароль SSH один раз


124

До обновления

Когда я запускал git clone git@...(используя ssh) один раз для перезагрузки компьютера, появилось диалоговое окно, содержащее текстовое поле для вставки моей парольной фразы SSH, и подтвердил, нажав OK. Тогда парольная фраза больше не требовалась до следующего запуска моей системы.

После обновления до 13.10

После обновления до Ubuntu 13.10 это окно больше не появляется, но в терминале появляется сообщение:

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

... каждый раз при клонировании git-репозитория это появляется.

Как я могу это исправить? Я хочу ввести свой пароль только один раз.


1
Я думаю, что вы должны использовать ssh-addкоманду для этого. Ты это пробовал?
Деви

2
Я пытался ssh-agent bash+ ssh-add. Это работает только в течение нескольких минут.
Ионика Бизэ

У меня все та же проблема в конце концов. Я думаю, что это может быть конфликт между ssh-агентом OpenSSH и демоном ключей Gnome.
Деви


2
Добавить AddKeysToAgent yesв .ssh / config у меня работает.
xslittlegrass

Ответы:


138

Обновление: похоже, ошибка от 13.10:

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


В любом случае при запуске следующих команд проблема была исправлена ​​для меня:

Как исправить

Я исправил это, введя следующие команды:

$ ssh-agent bash

Это создает новый процесс bash, который позволяет вам добавлять закрытые ключи. При добавлении нового закрытого ключа вам будет предложено ввести пароль один раз и только один раз.

А потом:

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

... где usernameваше имя пользователя. Вы можете сделать то же самое, используя $USERпеременную:

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

В качестве альтернативы, просто используйте ~для вашего домашнего каталога.

$ ssh-add ~/.ssh/id_rsa

И проблема была исправлена.


48
Это не решает проблему вообще. Он только добавляет личность к агенту, пока вы не выйдете из терминала. Если вы открываете новый терминал, вам придется ssh-addснова.
Деви

@devius Да, похоже, это ошибка. Но вышеприведенные команды
устранили

3
Для пояснения: с помощью этого «исправления» вам не нужно будет снова вводить фразу-пароль в этом терминале. В тот момент, когда вы открываете новый терминал - вам придется снова ввести пароль.
Хариджай

9
Я пытался $ ssh-add /home/username/.ssh/id_rsa(без ssh-agent bash), и у меня это работало даже после повторного открытия терминала. Но полное решение для меня было вот этот stackoverflow.com/a/4246809/532252 . Все хорошо даже после перезагрузки машины.
Киш

1
Я просто набрал ssh-add в терминале. Нет необходимости переключаться на ssh-agent bash или указывать файл
id_rsa

39

0) Короткий ответ

Добавьте в .ssh/configначале одну строку:

AddKeysToAgent yes

и запустите git / ssh / ... Если этого недостаточно, проверьте версию ssh и убедитесь, что ssh-agent загружен с этими инструкциями:

1) Проверьте версию openssh

Сначала проверьте, что ваша версия ssh должна быть больше или равна 7.2 :

ssh -V

2) Отредактируйте файл конфигурации

Если это так, просто добавьте .ssh/configодну строку в начале:

AddKeysToAgent yes

3) Проверьте, открыт ли ssh-agent

Обычно дистрибутивы автоматически загружают ssh-agent. Чтобы проверить это, запустите

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

Если вы не видите ни одной строки, содержащей его, вам нужно загрузить его, выполнив:

eval $(ssh-agent)

Обратите внимание, что это активирует агента только на текущем терминале, поэтому, чтобы включить его везде, вы можете попытаться добавить эту строку в свой ~/.profileфайл и перезагрузиться.


11
AddKeysToAgent yesявляется каноническим ответом после 2016 года - и именно то , к чему стремится большинство современных пользователей. Это середина 2017 года. Ubuntu> = 16.04 ( Xenial Xerus ) - теперь разумное предположение. Большинство установок OpenSSH в дикой природе теперь поддерживают эту опцию. Специальные сценарии оболочки, подобные тем, которые поддерживаются любым другим ответом на этот вопрос, настолько ... пассивны . </sigh>
Сесил Карри

2
Это должен быть принятый ответ
Симернес

32

Этот документ Atlassian устранил проблему для меня в Ubuntu 14.04 Server Edition:

Просто добавьте эти значения в ваш .bashrcфайл:

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

И после входа в систему он запрашивает пароль только один раз и кешируется. Вам не нужно вводить его каждый раз.


2
Похоже, что это работает на других дистрибутивах, как я только что успешно использовал этот ответ на Sabayon Linux.
BH2017

1
Спасибо! Это решение работало для меня в системе Ubuntu, где gnome-keyring-daemon не работал из-за проблем с dbus-daemon. В частности, я получаю эти ошибки "** Сообщение: не удалось подключиться к сеансной шине dbus: невозможно автоматически запустить демон dbus без $ DISPLAY для X11", и после установки переменной среды отображения я получил "** Сообщение: cann не подключается к сеансной шине dbus: // bin / dbus-launch аварийно завершился со следующей ошибкой: Ошибка автозапуска: ошибка инициализации X11. "
user207863 26.02.16

1
Это требует больше голосов, исправляет проблему на виртуализированной Ubuntu 16.04 отлично.
Нильс Кеурентьес

3
Это решает проблему и для меня в Bash для Windows. Я пытался запустить Bash несколько раз, и он запомнил парольную фразу. Еще не пробовал перезагрузить.
Амр

2
попробовав все остальные решения, это сработало для меня. Это должно стать решением для OP
Жоао Пиментел Феррейра

20

Обходной путь для этой ошибки - добавить следующее в конец~/.bashrc

eval `gnome-keyring-daemon --start`

2
Разве гном не должен быть просто частью вашей сессии?
Павел Шимерда

1
Если вы говорите о «должен», то этот вопрос не должен быть здесь на первом месте, если все так идеально
Анвар

1
Не уверен, если это принадлежит .bashrc. Похоже, вы должны добавить его в некоторый файл профиля DE
Дмитрий Гинзбург

3

Пользователи оболочки рыбы могут использовать этот скрипт, чтобы сделать то же самое.

# 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

Я использую это:

vim ~/.profile

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

0

Если вы используете Azure .ppk файл

Просто преобразуйте его в pem и добавьте разрешение 400 с помощью простых шагов:

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

В Ubuntu 18.04 ssh-agent запускается при открытии сеанса X, им управляют в файле /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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.