Как использовать закрытый ключ SSH для входа в систему без необходимости каждый раз вводить пароль в Mac OS X Lion?

Как использовать закрытый ключ SSH для входа в систему без необходимости каждый раз вводить пароль в Mac OS X Lion?

Я использую Mac OS X Lion и каждый день вхожу в удаленные хосты через SSH. Несмотря на то, что я использую пару ключей SSH для удаленной аутентификации и мне не нужно автоматизировать фразу входа каждого хоста, все равно очень раздражает, что терминал запрашивает пароль для доступа к моему закрытому ключу SSH.

По соображениям безопасности, я думаю, парольная фраза для доступа к закрытому ключу SSH просто необходима. Есть ли способ заставить терминал запрашивать фразу только один раз при запуске, затем запомнить ее и автоматически использовать мой закрытый ключ в последующих сеансах SSH?

Есть скрипт, keychainкоторый отлично работает на Gentoo Linux. Но я так и не разобрался с ним на Mac OS X Lion. Более того, там так много пугающих терминов, таких как ssh-agent, ssh-add. После прочтения различных материалов об этих SSH-инструментариях и проведения некоторых неудачных экспериментов я еще больше запутался.

Поэтому я пришел на StackExchange в поисках совета по следующим вопросам.

  1. Что такое ssh-agent, ssh-add, keychain, Keychain Access.appи как они взаимодействуют друг с другом?
  2. Как мне ввести парольную фразу для моего закрытого ключа SSH один раз при входе в систему и свободно использовать ее при последующем создании сеанса SSH?
  3. Эээ... Что не так с Keychain Access.app? Он не сохраняет фразу SSH, как раньше.

Я перечисляю здесь то, что я сделал. Надеюсь, есть подсказки о шагах, которые я пропустил.

Шаг 1. Создайте пару ключей SSH на моем Mac.

$ ssh-keygen -t rsa -C "[email protected]"
# Set a passphrase for accessing the private key.

Шаг 2. Копирую свой открытый ключ SSH на удаленный хост. Для примера я копирую ключ на локальный хост, Mac.

$ ssh-copy-id USER@localhost
# Enter the login password for USER at localhost, not my SSH passphrase

Шаг 3. Затем попробуйте подключиться к удаленному хосту (в данном случае localhost) с помощью аутентификации с помощью пары ключей SSH.

$ ssh USER@locahost
Enter passphrase for key '/Users/YOUR_ACCOUNT/.ssh/id_rsa': 
# Enter my SSH passphrase, not the login password.

Шаг 4. Выйдите из удаленного хоста и попробуйте подключиться к нему снова. Черт, терминал снова запрашивает фразу SSH.

Часто задаваемый вопрос: «Хорошо ли работает ssh-agent на вашем Mac?». Честно говоря, я понятия не имею, что происходит в этих вещах. Вот некоторые результаты работы.

$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(EMPTY)
$ ssh-add -l
Could not open a connection to your authentication agent.
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-Z54zXukQiP/agent.26769; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26770; export SSH_AGENT_PID;
echo Agent pid 26770;
$ ssh-add -l
Could not open a connection to your authentication agent.
$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(STILL EMPTY)
$ ssh-agent  # Oh no, anther ssh-agent with different PID
SSH_AUTH_SOCK=/tmp/ssh-cx0B4FUX8B/agent.26898; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26899; export SSH_AGENT_PID;
echo Agent pid 26899;
$ ps -e | grep -i ssh
26769 ??         0:00.03 ssh-agent
26899 ??         0:00.02 ssh-agent

Любые отзывы приветствуются. Спасибо!

решение1

ssh-agentэто та часть, которую вы хотите заставить работать, поскольку она делает именно то, о чем вы спрашиваете. Агент работает как демон, и когда вы «добавляете» к нему закрытый ключ, он запоминает этот ключ и автоматически предоставляет его удаленному устройству sshdво время первоначального подключения. ( ssh-addэто просто команда, которую вы запускаете, чтобы вручную добавить закрытый ключ к ssh-agent).

В OS X, как и в Leopard, вам никогда не придется запускать ssh-agentили ssh-addвручную. Это должно «просто произойти» при попытке подключения к серверу. Один раз на ключ, он предложит вам диалоговое окно пароля пользовательского интерфейса, которое (помимо прочего) позволит вам автоматически добавить ключ в , ssh-agentчтобы вам больше никогда не приходилось его запрашивать.

Это достигается за счет launchdконфигурации, которая прослушивает соединения на $SSH_AUTH_SOCKсокете и автоматически запускается ssh-agentпри первой необходимости; после этого ssh-agentзапрашивает учетные данные только тогда, когда необходимо открыть новый ключ.

Если это не работает, убедитесь, что у вас есть правильный launchdфайл конфигурации:

/System/Library/LaunchAgents/org.openbsd.ssh-agent.plist

Если по какой-то причине у вас все еще не работает, вот «старый» способ запустить все вручную:

http://timesinker.blogspot.com/2007/08/getting-ssh-agent-going-on-mac-osx.html

Есть еще одно приложение, которым я перестал пользоваться с выходом Leopard, но которое, по сути, делало то же самое в предыдущих версиях Mac OS X:

http://www.sshkeychain.org/

решение2

В процессе решения "проблемы" я гуглил некоторые связанные темы и записывал некоторые заметки о том, как ssh-agent, ssh-add, keychain, KeyChain Access.appработают. В конце концов, оказалось, что эта проблема вообще не проблема, а проблема во мне, и так называемомssh-вход-без-запроса-пароля-каждый-разотлично работает на Mac сразу из коробки.

Однако этот процесс дает мне некоторый опыт. Я записываю здесь свои заметки в надежде, что они помогут кому-то, кто запутался в этих терминах.

Два термина пароля:

  • passphraseотносится к обязательной фразе при доступе к вашему закрытому ключу SSH.
  • passwordобозначает фразу, необходимую для входа в систему Mac.

Теперь я могу понять, что делают эти наборы инструментов, то есть, , , ssh-agentна ssh-addMac .keychainKeychain Access.app

  • ssh-agentявляется критически важным сервисом для включения использования закрытого ключа SSH без ввода парольной фразы SSH. ssh-agentработает таким образом. Сначала он сохраняет иликэш, ваш закрытый ключ SSH в основной памяти. Затем, позднее в этом сеансе, когда ваш закрытый ключ SSH понадобится для удаленной аутентификации, ssh-agentнайдет ваш закрытый ключ в основной памяти и передаст его удаленному процессу. Единственный шанс, что вас попросят ввести вашу парольную фразу SSH, — это когда ваш закрытый ключ изначально добавлен ssh-agent.
  • ssh-addявляется частью ssh-agentколлекции, которая помогает управлять вашими ключами SSH в ssh-agent. Мы используем ssh-addкоманду для перечисления, добавления, удаления закрытых ключей в связке ключей ssh-agent. Затем ssh-addсвязывается со ssh-agentслужбой для выполнения задач.
  • keychainэто скрипт для поиска ssh-agentслужбы (если ее нет, запуска новой) и вызова ssh-addдля добавления закрытых ключей SSH. keychainимеет простую и понятную идею, отлично работающую в Linux, где ssh-agent обычно не запускается автоматически.
  • Keychain Access.appКажется, это самый сложный компонент. Это универсальный сервис хранения токенов Mac OS X. Он хранит различные токены, такие как пароли, сертификаты и т. д., и служит в качестве токенаагентдля тех приложений, которые запрашивают токены. В нашем случае с закрытым ключом SSH сначала он принимает запрос на доступ к закрытому ключу SSH и выводит окно с просьбой сохранить парольную фразу SSH, которая является своего рода токеном, в Keychain Access.appсвязке ключей . Затем в следующий раз, когда вы будете использовать закрытые ключи для аутентификации, Keychain Access.appснова выводит окно с вопросом, предоставляете ли вы привилегию. Получив большое «да», keychain Access.appдобавляет ваш закрытый ключ в ssh-agentхранилище .

Два момента заслуживают вашего внимания:

  1. Mac OS X Lion автоматически запускает ssh-agentслужбу при загрузке, прослушивая сокет в /tmp.
  2. Keychain Access.appхранит вашу парольную фразу SSH, поэтому он может добавить ваш закрытый ключ, ssh-agentне прерывая вас. Да, не нужно вводить вашу фразу SSH, но нужно ввести пароль входа в учетную запись Mac для предоставления привилегий при создании этой записи в первый раз.

Итак, подведем итоги,SSH-login-without-asking-passphrase должен работать на Mac OS X сразу после установки.

решение3

На случай, если другие решения здесь не сработают, мне помогло следующее.

Для каждого закрытого ключа в вашем каталоге ~/.ssh убедитесь, что соответствующий открытый ключ также присутствует. Убедитесь, что открытый ключ назван точно так же, как и закрытый ключ, но с .pub. Если у вас уже был соответствующий открытый ключ, попробуйте сгенерировать его заново.

Если вам необходимо заново создать открытые ключи, вы можете сделать это легко:

ssh-keygen -y -f ~/.ssh/my_key > ~/.ssh/my_key.pub

замените my_keyна то, как называется ваш ключ.

После этого MacOS запомнит парольную фразу ключа в связке ключей, как и положено.

Примечание: ввод парольной фразы и сохранение ее в связке ключей теперь является одноразовым действием (а не один раз за сеанс входа, как хотел OP), но если предположить, что вход в рассматриваемый mac защищен паролем, то ваша парольная фраза защищена этим паролем входа. Кроме того, это решение не имеет для меня смысла... открытый ключ не должен требоваться в дополнение к закрытому ключу, но по какой-то причине MacOSX требует его.

(первоначально изотвечатьна аналогичный вопрос на Apple Stack Exchange)

решение4

Еще можно было бы попробовать заменить ssh-copy-idна что-то вроде .k="$(cat ~/.ssh/id_rsa.pub)"; ssh [email protected] "umask 0077; mkdir -p ~/.ssh; echo "$k" >> ~/.ssh/authorized_keys2"

Связанный контент