Введите пароль SSH один раз
До обновления
Когда я бегал git clone git@...
(используя ssh) один раз для перезагрузки каждого компьютера появилось диалоговое окно, содержащее текстовое поле для вставки моей парольной фразы SSH, и подтвердил OK. Тогда парольная фраза больше не требовалась до следующего запуска моей системы.
После обновления до 13.10
После обновления до Ubuntu 13.10 это окно больше не появляется, но в терминале появляется сообщение:
Enter passphrase for key '/home/username/.ssh/id_rsa':
... каждый раз при клонировании git-репозитория это появляется.
Как я могу это исправить? Я хочу ввести свой пароль только один раз.
11 ответов
Обновление: похоже, ошибка от 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
И проблема была исправлена.
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
файл и перезагрузка.
Этот документ 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
И после входа в систему он запрашивает пароль только один раз и кешируется. Вам не нужно вводить его каждый раз.
Обходной путь для этой ошибки - добавить следующее в конец ~/.bashrc
eval `gnome-keyring-daemon --start`
Я потратил слишком много времени, чтобы запустить его на WSL2 Ubuntu 20.04. Наконец, нам нужно запустить ssh-agent при создании новой консоли, но не загружать ключ thne. Загрузить ключ при первом использовании и использовании
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
Пользователи оболочки рыбы могут использовать этот скрипт, чтобы сделать то же самое.
# 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
В 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
Если вы используете 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>
Если вы используете Ubuntu 18.04 или более позднюю версию, связка ключей gnome запустит ssh-agent и установит переменную среды SSH_AUTH_SOCK. Вы всегда можете проверить после перезагрузки с помощью команды
pgrep -af ssh-agent
чтобы увидеть, запущен ли ssh-агент и запущен ли он с помощью gnome keyring, вы должны увидеть вывод, например
214325 /usr/bin/ssh-agent -D -a /run/user/1000/keyring/.ssh
Если НЕТ, вы можете добавить следующее перед добавлением команд цепочки для ключей .
eval `/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh,gpg`
export SSH_AUTH_SOCK
export GPG_AGENT_INFO
Чтобы воспользоваться преимуществами хранения секретов в связке ключей gnome, все, что нам нужно, это установить Seahorse, также известную как Passwords and Keys , из магазина программного обеспечения Ubuntu, с помощью которого мы можем добавлять ключи SSH и его парольные фразы с помощью графического интерфейса.
Добавьте приведенный ниже раздел в файл конфигурации SSH по адресу
$HOME/.ssh/config
если еще не присутствует.
Host *
AddKeysToAgent yes
После добавления ключей и их кодовых фраз к морскому коньку установите цепочку для ключей , а затем добавьте следующую строку в
.bashrc
.
key_files=('~/.ssh/id_rsa1' '~/.ssh/id_rsa2')
# This will inherit the ssh-agent started by the gnome keyring and hence
# we don't need to enter passphrases after every reboot.
/usr/bin/keychain --agents ssh --inherit any --eval ${key_files[*]}
source "$HOME/.keychain/$HOSTNAME-sh"
Альтернативное решение - использовать связку ключей.
Страница руководства.
Связка ключей помогает вам удобно и безопасно управлять ключами SSH и GPG. Он действует как интерфейс для ssh-agent и ssh-add, но позволяет легко иметь один длительный процесс ssh-agent для каждой системы, а не один ssh-agent на сеанс входа в систему.
Это значительно сокращает количество раз, которое вам нужно вводить парольную фразу.
Я использую это:
vim ~/.profile
eval `/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh,gpg`
export SSH_AUTH_SOCK
export GPG_AGENT_INFO