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

Перед обновлением

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

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

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

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

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

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

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

https://bugs .launchpad.net/ubuntu /+источник/libpam-ssh/+ошибка/1247169


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

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

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

$ ssh-agent bash

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

И затем:

$ ssh-add /home/username/.ssh/id_rsaEnter 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

И проблема была устранена.

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

Воспользуйся AddKeysToAgent и добавьте следующее в свой .ssh/config в начале:

AddKeysToAgent yes

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

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

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

ssh -V

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

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

AddKeysToAgent yes

Другими вариантами являются no (значение по умолчанию), yes, confirm (необязательно с последующим временным интервалом), ask или временной интервал.

#3) Проверьте, открыт ли уже ssh-агент

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

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

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

eval $(ssh-agent)

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

Этот атласский документ (archive.org резервное копирование) исправлена проблема для меня в Ubuntu 14.04 Server Edition:

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

SSH_ENV=$HOME/.ssh/environment   # start the ssh-agentfunction 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

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

Обходной путь для эта ошибка состоит в том, чтобы добавить следующее в нижнюю часть ~/.bashrc

eval `gnome-keyring-daemon --start`

Пользователи системы рыбий панцирь можете использовать это скрипт чтобы сделать то же самое.

# content has to be in .config/fish/config.fish# if it does not exist, create the filesetenv SSH_ENV $HOME/.ssh/environmentfunction 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-addendfunction 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    endendif [ -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

Я потратил слишком много времени, чтобы запустить его на WSL2 Ubuntu 20.04. Наконец, нам нужно запустить ssh-агент при создании новой консоли, но тогда не загружайте ключ. Загрузить ключ при первом использовании и использовать AddKeysToAgent.

Добавьте следующее в конце вашего ~/.bashrc или ~/.zshrc:

SSH_ENV="$HOME/.ssh/agent-environment"function start_agent {    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"    chmod 600 "${SSH_ENV}"    . "${SSH_ENV}" > /dev/null}if [ -f "${SSH_ENV}" ]; then    . "${SSH_ENV}" > /dev/null    #ps ${SSH_AGENT_PID} doesn't work under cywgin    ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {        start_agent;    }else    start_agent;fi

Обратите внимание, что /usr/bin/ssh-add; намеренно отсутствует здесь, по сравнению с оригинальный сценарий.

И добавьте следующее в конце ~/.ssh/config файл:

Host *   AddKeysToAgent yes

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

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

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

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

vim ~/.profileeval `/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh,gpg`export SSH_AUTH_SOCKexport GPG_AGENT_INFO

Альтернативным решением является использование брелок.
Справочная страница.

Keychain помогает вам управлять ключами SSH и GPG удобным и безопасным способом. Он действует как интерфейс для ssh-agent и ssh-add, но позволяет вам легко иметь один долго работающий процесс ssh-agent для каждой системы, а не обычный один ssh-агент для каждого сеанса входа в систему.

Это значительно сокращает количество раз, когда вам нужно вводить свою кодовую фразу.

В Ubuntu 18.04 ssh-агент запускается при открытии сеанса 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-failsafeallow-user-resourcesallow-user-xsessionuse-ssh-agentuse-session-dbus

Добавление AddKeysToAgent yes в .ssh /config работает для меня.

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

Я попробовал ssh-agent bash + ssh-add. Это работает всего несколько минут.

Связанная ошибка: https://bugs .launchpad.net/ubuntu /+источник/libpam-ssh/+ошибка/1247169

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

@devius Посмотрите, поможет ли вам мой ответ: git - Enter SSH passphrase once - Ask Ubuntu