How to permanently add a private key with ssh-add on Ubuntu?

У меня есть закрытый ключ, защищенный паролем для доступа к серверу через SSH.

У меня есть 2 машины linux (ubuntu 10.04), и поведение команды ssh-add у них различное.

На одной машине, когда я использую "ssh-add .ssh/identity" и ввожу свой пароль, ключ добавлялся постоянно, т.е. каждый раз, когда я выключаю компьютер и снова захожу, ключ уже добавляется.

В другом я должен добавить ключ каждый раз, когда я вхожу в систему.

Насколько я помню, я сделал то же самое на обоих. Разница лишь в том, что ключ был создан на том, который добавлен навсегда.

Кто-нибудь знает, как добавить его на другую машину?

13 ответов

Решение

Решением было бы принудительно сохранить ключевые файлы, добавив их в свой ~/.ssh/config файл:

IdentityFile ~/.ssh/gitHubKey
IdentityFile ~/.ssh/id_rsa_buhlServer

Если у вас нет файла "config" в каталоге ~/.ssh, вам следует его создать. Для этого не нужны рут права, так просто:

nano ~/.ssh/config

... и введите строки выше в соответствии с вашими требованиями.

Чтобы это работало, файл должен иметь команду chmod 600. Вы можете использовать команду chmod 600 ~/.ssh/config,

Если вы хотите, чтобы все пользователи компьютера использовали ключ, поместите эти строки в /etc/ssh/ssh_config и ключ в папке, доступной для всех.

Кроме того, если вы хотите установить ключ, специфичный для одного хоста, вы можете сделать следующее в ~/.ssh/config:

Host github
    HostName github.com
    User git
    IdentityFile ~/.ssh/githubKey

Вам нужно будет клонировать с @github вместо @github.com, но это имеет то преимущество, что будет пробоваться только этот ключ.

Я решил эту проблему в Mac OSX (10.10), используя опцию -K для ssh-add:

ssh-add -K ~/.ssh/your_private_key

Для macOS 10.12 и более поздних версий вам необходимо дополнительно отредактировать конфигурацию ssh, как описано здесь: https://github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain

Это не отвечало на ту же проблему для меня под Mac OS X Lion. Я закончил тем, что добавил:

ssh-add ~/.ssh/id_rsa &>/dev/null

На мой.zshrc (но.profile тоже подойдет), который, похоже, исправил это.

(Как предлагается здесь: http://geek.michaelgrace.org/2011/09/permanently-add-ssh-key-ssh-add/)

Просто добавьте цепочку для ключей, как указано в Ubuntu Quick Tips https://help.ubuntu.com/community/QuickTips

Какие

Вместо того, чтобы постоянно запускать ssh-agent и ssh-add, можно использовать цепочку ключей для управления вашими ssh-ключами. Чтобы установить связку ключей, вы можете просто щелкнуть здесь или использовать Synaptic для выполнения работы или apt-get из командной строки.

Командная строка

Другой способ установить файл - открыть терминал (Приложение-> Аксессуары-> Терминал) и набрать:

sudo apt-get install keychain

Редактировать файл

Затем вы должны добавить следующие строки в ваш ${HOME}/. Bashrc или /etc/bash.bashrc:

keychain id_rsa id_dsa
. ~/.keychain/`uname -n`-sh

У меня была такая же проблема в Ubuntu 16.04: некоторые ключи были добавлены навсегда, для других мне пришлось выполнить ssh-add на каждой сессии. Я обнаружил, что ключи, которые были добавлены навсегда, имели как закрытый, так и открытый ключ, расположенный в ~/.ssh и ключи, которые были забыты на каждом сеансе, имели только закрытые ключи ~/.ssh реж. Таким образом, решение простое: вы должны скопировать как закрытый, так и открытый ключ в ~/.ssh перед выполнением ssh-add,

Я попробовал решение @Aaron, и оно мне не помогло, потому что оно будет заново добавлять мои ключи каждый раз, когда я открываю новую вкладку в своем терминале. Поэтому я немного его изменил (обратите внимание, что большинство моих ключей также защищены паролем, поэтому я не могу просто отправить вывод в /dev/null):

added_keys=`ssh-add -l`

if [ ! $(echo $added_keys | grep -o -e my_key) ]; then
    ssh-add "$HOME/.ssh/my_key"
fi

Что это делает, это то, что он проверяет вывод ssh-add -l(в котором перечислены все ключи, которые были добавлены) для определенного ключа, и если он не находит его, то он добавляет его с ssh-add,

Теперь, когда я впервые открываю свой терминал, меня просят ввести пароли для моих закрытых ключей, и меня больше не спрашивают, пока я не перезагружу (или выйду из системы - я не проверял) мой компьютер.

Так как у меня есть куча ключей, я храню вывод ssh-add -l в переменной, чтобы улучшить производительность (по крайней мере, я думаю, это улучшает производительность:))

PS: я на Linux, и этот код пошел в мой ~/.bashrc файл - если вы работаете в Mac OS X, то я предполагаю, что вы должны добавить его в .zshrc или же .profile

РЕДАКТИРОВАТЬ: Как указано @Aaron в комментариях, .zshrc файл используется из zsh shell - так что если вы не используете это (если вы не уверены, то, скорее всего, вы используете bash вместо этого), этот код должен идти к вашему .bashrc файл.

В моем случае решение было:

Разрешения на файл конфигурации должны быть 600. chmod 600 config

Как упомянуто в комментариях выше по genralopinion

Не нужно трогать содержимое файла конфигурации.

Я запускаю Ubuntu, используя два ключа id_rsa. (один персональный для работы). ssh-add запомнил бы один ключ (личный) и каждый раз забывал о компании.

Увидев разницу между ними, я увидел, что у моего личного ключа было 400 прав, а у одного - 600 прав. (имел U + W). Удаление пользователя с правом записи с ключа компании (uw или значение 400) устранило мою проблему. ssh-add теперь запоминает оба ключа.

Для тех, кто использует оболочку Fish, вы можете использовать следующую функцию, затем вызвать ее в ~/.config/fish/config.fish. Он загрузит все ключи, которые начинаются с id_rsa в ssh-agent,

# Load all ssh keys that start with "id_rsa"
function loadsshkeys
  set added_keys (ssh-add -l)
   for key in (find ~/.ssh/ -not -name "*.pub" -a -iname "id_rsa*")
    if test ! (echo $added_keys | grep -o -e $key)
      ssh-add "$key"
    end
  end
end

# Call the function to run it.
loadsshkeys

Если вы хотите иметь ssh-agent автозапуск при открытии терминала вы можете использовать https://github.com/tuvistavie/fish-ssh-agent для этого.

Это сработало для меня.

ssh-agent /bin/sh
ssh-add /path/to/your/key

В Ubuntu 14.04 (может быть, раньше, может быть, все еще) вам даже не нужна консоль:

  • Начните seahorse или запустите то, что вы найдете в поиске "ключ"
  • создайте ключ SSH там (или импортируйте один)
    • не нужно оставлять пароль пустым
    • вам предлагается даже отправить открытый ключ на сервер (или более)
  • у вас получится запущенный ssh-агент и этот ключ загружен, но заблокирован
  • с помощью ssh заберет личность (т.е. ключ) через агента
  • при первом использовании во время сеанса пароль будет проверен
    • и у вас есть возможность автоматически разблокировать ключ при входе в систему
    • это означает, что логин будет использоваться для переноса ключевой фразы
  • примечание: если вы хотите переслать вашу личность (то есть переадресация агента), вызовите ssh с -A или сделать это по умолчанию
    • в противном случае вы не сможете аутентифицироваться с этим ключом на компьютере, на котором вы позже авторизуетесь на третьей машине

Добавление следующих строк в "~/.bashrc" решило проблему для меня. Я использую рабочий стол Ubuntu 14.04.

eval `gnome-keyring-daemon --start`
USERNAME="reynold"
export SSH_AUTH_SOCK="$(ls /run/user/$(id -u $USERNAME)/keyring*/ssh|head -1)"
export SSH_AGENT_PID="$(pgrep gnome-keyring)"

Очень просто ^_^ два шага

1. установить брелок

2. добавьте код ниже.bash_profile

/usr/bin/keychain $HOME/.ssh/id_dsa
source $HOME/.keychain/$HOSTNAME-sh
Другие вопросы по тегам