Как навсегда добавить закрытый ключ с помощью ssh-add в Ubuntu?
У меня есть закрытый ключ, защищенный паролем для доступа к серверу через SSH.
У меня есть 2 linux (ubuntu 10.04) машины, и поведение команды ssh-add отличается в обоих из них.
В одной машине, когда я использую "ssh-add.ssh/identity" и ввел свой пароль, ключ был добавлен постоянно, т.е. каждый раз, когда я завершаю компьютер и снова вхожу, ключ уже добавлен.
В другом случае я должен добавлять ключ каждый раз, когда я вхожу в систему.
Насколько я помню, я сделал то же самое на обоих. Единственное различие заключается в том, что ключ был создан на том, который добавлен навсегда.
Кто-нибудь знает, как добавить его навсегда на другую машину?
Ответы
Ответ 1
Решение состоит в том, чтобы принудительно сохранить файлы ключей, добавив их в файл ~/.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.com
User git
IdentityFile ~/.ssh/githubKey
Это имеет преимущество, когда у вас много идентификаторов, что сервер не отклоняет вас, потому что вы сначала пробовали неправильные идентификаторы. Будет проверена только конкретная личность.
Ответ 2
Это не ответило на мою проблему в 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/)
Ответ 3
Я решил эту проблему в 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
Ответ 4
Просто добавьте цепочку ключей, как указано в Ubuntu Quick Tips
https://help.ubuntu.com/community/QuickTips
Что
Вместо постоянного запуска ssh-agent и ssh-add можно использовать keychain для управления вашими ssh-ключами. Чтобы установить keychain, вы можете просто щелкнуть здесь или использовать Synaptic для выполнения задания или apt-get из командной строки.
Командная строка
Другой способ установки файла - открыть терминал (Application- > Accessories- > Terminal) и ввести:
sudo apt-get install keychain
Редактировать файл
Затем вы должны добавить следующие строки в ваш ${HOME}/. bashrc или /etc/ bash.bashrc:
keychain id_rsa id_dsa
. ~/.keychain/`uname -n`-sh
Ответ 5
Я попробовал решение @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
EDIT:
Как отметил @Aaron в комментариях, файл .zshrc
используется из оболочки zsh
, поэтому, если вы не используете его (если вы не уверены, то, скорее всего, вы используете bash
), этот код должен перейти в ваш файл .bashrc
.
Ответ 6
В моем случае решение было:
Разрешения для файла конфигурации должны быть 600. chmod 600 config
Как упоминалось в комментариях выше
generalopinion
Не нужно касаться содержимого конфигурационного файла.
Ответ 7
У меня была такая же проблема в Ubuntu 16.04: некоторые ключи были добавлены навсегда, для других мне приходилось выполнять ssh-add
при каждом сеансе. Я обнаружил, что ключи, которые были добавлены постоянно, имели как закрытый, так и открытый ключи, расположенные в ~/.ssh
, а ключи, которые были забыты при каждом сеансе, имели только закрытые ключи в ~/.ssh
dir. Поэтому решение простое: перед выполнением ssh-add
вы должны скопировать закрытый и открытый ключи в ~/.ssh
.
P.S.: Насколько я понимаю из Gnome wiki, мой метод работает благодаря инструменту gnome-keyring, который является частью Gnome Desktop Environment. Поэтому мой метод, вероятно, должен работать, только если вы используете Gnome или DE на основе Gnome.
Ответ 8
В Ubuntu 14.04 (возможно, раньше, может быть, еще) вам даже не нужна консоль:
- запустите
seahorse
или запустите ту вещь, которую вы найдете в поиске "ключа"
- создайте там SSH-ключ (или импортируйте его)
- Не нужно оставлять кодовую фразу пустой.
- вам предлагается даже нажать открытый ключ на сервер (или более)
- вы закончите работу с ssh-agent, и этот ключ будет загружен, но заблокирован
- с помощью
ssh
будет получать идентификатор (то есть ключ) через агента
- при первом использовании во время сеанса, кодовая фраза будет проверена
- и у вас есть возможность автоматически разблокировать ключ при входе в систему
- это означает, что login auth будет использоваться для обертывания ключевой фразы ключа
- обратите внимание: если вы хотите переслать свою личность (например, переадресацию агента), вызовите
ssh
с помощью -A
или сделайте это по умолчанию
- иначе вы не сможете аутентифицироваться с помощью этого ключа на машине, на которую вы входите позднее, на третью машину.
Ответ 9
Я запускаю Ubuntu, используя два ключа id_rsa. (один личный для работы).
ssh-add будет помнить один ключ (личный) и каждый раз забывать о компании.
Проверяя разницу между двумя, я видел, что у моего личного ключа было 400 прав, в то время как у компании было 600 прав. (имел u + w).
Удаление права на запись пользователя из ключа компании (u-w или set to 400) устранило мою проблему. ssh-add теперь запоминает оба ключа.
Ответ 10
Добавление следующих строк в "~/.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)"
Ответ 11
очень простой ^ _ ^ два шага
1.yum install keychain
Код 2.add ниже .bash_profile
/usr/bin/keychain $HOME/.ssh/id_dsa
source $HOME/.keychain/$HOSTNAME-sh
Ответ 12
Это сработало для меня.
ssh-agent /bin/sh
ssh-add /path/to/your/key
Ответ 13
Для тех, кто использует оболочку 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
запускался автоматически при открытии терминала, вы можете использовать tuvistavie/fish-ssh-agent для этого.