Агент SSH втрачає ідентичність під час перезавантаження машини


12

Після створення ключів з іменем id_rsaу стандартному розташуванні. Я додаю ідентичність агенту SSH з командою ssh-add ~/.ssh/id_rsa, він додає успішно.

Я можу SSH, не вводячи ключову фразу пропуску, оскільки це вже з агентом SSH.

Але , коли я перезавантажую машину чи сервер, а потім перевіряю на тотожність за допомогою команди, ssh-add -Lя отримую повідомлення типу The agent has no identities.

Це означає, що, коли ми перезапускаємо машину, агент втратив ідентичність? Це нормальна поведінка чи якась річ, яку мені тут не вистачає?

Підкажіть, будь ласка, я не дуже знайомий з SSH.


Дивіться цю тему на сайті Unix & Linux.
janosdivenyi

Відповіді:


12

Це нормально. Мета ключового агента - просто зберігати розшифровані ключі в пам'яті , але він ніколи не запише їх на диск. (Це б перемогло мету - чому б не просто захистити головний ключ замість цього?)

Отже, ключі повинні бути розблоковані на кожному вході, і вам потрібно це автоматизувати - в Linux використовується pam_sshодин варіант; він автоматично використовує ваш пароль ОС для розблокування агента. Ще один подібний модуль - pam_envoyце трохи надійніший afaik (але вимагає системного).

Обидва модулі запускають сам агент і завантажують ключі автоматично.


будь-яка ідея, як автоматизувати на терміналі mac osx?
Нікс

Коли я запустив команду, $SSH_AUTH_SOCK я отримую результат як:: В -bash: /tmp/ssh-gT43vE99vk/agent.511дозволі відмовлено, я тут плутаюсь .. погода, коли мій агент пересилає роботу, чи ні.
Нікс

Це не призначене для використання в якості команди - це змінна , те, що ви використовуєте як частину іншої команди. Наприклад, echo $SSH_AUTH_SOCKщоб надрукувати його значення.
user1686

ей приятель .. будь-яка ідея? stackoverflow.com/questions/31916395/…
Нікс

2

Спробуйте це до свого ~ / .bashrc :

if [ ! -S ~/.ssh/id_rsa ]; then
  eval `ssh-agent`
  ln -sf "$SSH_AUTH_SOCK" ~/.ssh/id_rsa
  ssh-add
fi
export SSH_AUTH_SOCK=~/.ssh/id_rsa

Це потрібно запросити пароль лише після того, як ви ввійдете в систему.


Дякуємо за відповідь. Це означає, що агент SSH працює належним чином. І після додавання цього не потрібно буде додавати посвідчення кожного разу при запуску машини? Вибачте, якщо це дурне питання, але я дуже новачок у ssh.
Нікс

Якщо у ключа ssh є пароль, він буде підказувати кожного разу при вході в систему.
Широ

Ця відповідь шкідлива . Якщо ви зробите те, що говорить, він видалить ваш приватний ключ. Якщо у вас немає іншого способу аутентифікації, ви втратите доступ до систем, де ви використовували аутентифікацію відкритих ключів.
kasperd

2

У OS X ssh-add має спеціальний прапор для підключення до Keychain, якщо ви вирішили зберігати там свій приватний ключ.

Просто біжи ssh-add -K ~/.ssh/id_rsa.

Я вважаю, що це відповідає на ваше запитання більш повно. Цей специфічний прапор для OS X важко знайти документацію, але він працює з принаймні OS X Leopard.


2
Це правильна відповідь, за ssh-add -Aякою слід додати всі ключі в брелок. Крім того, також створіть ~/.ssh/configі додайте, UseKeychain yesщоб macOS завжди зберігав ваш ключ, як описано тут: unix.stackexchange.com/questions/140075/…
lucasarruda

Мій MacBook все ще забуває мою особистість при перезавантаженні, навіть після спроби цього.
Домінік Сайерс

0

Це рішення зручно, якщо ваші ключі ssh захищені парольною фразою.

Проблема з усіма перерахованими вище відповідями є те , що якщо секретний ключ ключової фрази захищений, кожен раз , коли ви запускаєте новий термінал і спробувати використовувати секретний ключ, ви повинні ввести ключову фразу , і ви будете в кінцевому підсумку запуск декількох копій ssh-agentдюйма пам'ять. Рішення полягає в тому, щоб додати наступне у свій ~/.bashrcчи ~/.zshrc:

##### START Fix for ssh-agent #####
# Ref: http://mah.everybody.org/docs/ssh

SSH_ENV="$HOME/.ssh/environment"

function start_agent {
     echo "Initialising new 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;
}

# Source SSH settings, if applicable
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
##### END Fix for ssh-agent #####

Це вимагатиме пройти парольну фразу ваших приватних ключів ssh лише один раз при запуску терміналу. Подальше відкриття нових термінальних сеансів (або бачення tmux) призведе до повторного використання ssh-агента, створеного фрагментом вище.

Довідково

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.