Як використовувати приватний ключ SSH для входу, не вводячи парольну фразу щоразу на Mac OS X Lion?


23

Я використовую 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 "me@email.com"
# Set a passphrase for accessing the private key.

Крок 2. Скопіюйте мій відкритий ключ SSH на віддалений хост. Для прикладу я копіюю ключ до localhost, 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-агент на вашому 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

Будь-який відгук вітається. Спасибі!


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

Відповіді:


12

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/


4
Спасибі, Майкл Еденфілд. Я зрозумів, що відбувається не так, і тепер ssh-login-without-passphrase ідеально працює на Mac OS X Lion. Я робив кілька дурних речей - я робив символічне посилання, що ~/tmpвказувало на /tmp/та виконував роботу з крон, щоб очищати ~/tmpкожні 2 години, що також вилучало розетку ssh-агента. О людино, я ненавиджу себе.
Jianwen W.

13

У процесі вирішення «проблем», я гугл деяких теми , пов'язані і записати деякі замітки про те , як ssh-agent, ssh-add, keychain, KeyChain Access.appроботі. Зрештою виявляється, що ця проблема зовсім не є проблемою, натомість ця проблема стосується мене, і так званий ssh-login-без запитань-пароль-кожен раз відмінно працює на Mac.

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

Два умови пароля:

  • passphrase посилається на необхідну фразу під час доступу до приватного ключа SSH.
  • password відноситься до необхідної фрази для входу на ваш Mac.

Тепер я можу зрозуміти, що роблять ці набори інструментів, тобто ssh-agent, ssh-add, keychain, Keychain Access.appна Mac.

  • ssh-agent- це критична послуга, яка дозволяє використовувати приватний ключ SSH без введення парольної фрази SSH. ssh-agentпрацює таким чином. По-перше, він зберігає ваш приватний ключ SSH або кешує його в основній пам'яті. Потім у цей сеанс, коли ваш приватний ключ SSH потрібен для віддаленої автентифікації, ssh-agentзнайде ваш приватний ключ у головній пам'яті та передасть його віддаленому процесу. Єдиний шанс, який вам запропонують ввести свою парольну фразу SSH, - це коли ваш приватний ключ буде доданий ssh-agentпочатково.
  • ssh-addє частиною ssh-agentколекції, яка допомагає керувати вашими SSH ключами в ssh-agent. Ми використовуємо ssh-addкоманду для списку, додавання, видалення приватних ключів у ключі ssh-агента. Потім ssh-addспілкується зі ssh-agentслужбою для виконання завдань.
  • keychainце скрипт, щоб знайти ssh-agentслужбу (якщо її немає, запустити нову) та зателефонувати, ssh-addщоб додати приватні ключі SSH. keychainмає просту і просту ідею, яка працює в Linux, де ssh-агент зазвичай не запускається автоматично.
  • Keychain Access.appвидається найскладнішим компонентом. Це універсальна послуга зберігання токенів Mac OS X. Він зберігає різні лексеми, такі як паролі, certs та ін., І служить агентом маркера для тих додатків, які запитують маркери. У нашому випадку з приватним ключем SSH спочатку він розуміє запит на доступ до приватного ключа SSH та з'являється вікно з проханням зберегти парольну фразу SSH, яка є своєрідною лексемою, у Keychain Access.appkeyring. Тоді наступного разу, коли ви повинні використовувати приватні ключі для автентифікації, знову 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-логін-без запиту-пароль-фразу повинен працювати на Mac OS X нестандартно.


1

У випадку, якщо інші рішення тут не працюють для людей, наступне працювало для мене.

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

Якщо вам потрібно відтворити відкриті ключі, ви можете це зробити легко: -

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

замінюючи my_keyте, що називається вашим ключем.

Після цього MacOS запам'ятовує ключову фразу в брелоку як слід.

Примітка: введення парольної фрази та збереження в ній брелка тепер є одноразовою дією (не один раз за сеансом входу, як цього хотів ОП), але якщо припустити, що вхід на відповідний мак захищений паролем, то ваша парольна фраза захищена цим паролем для входу. Крім того, це рішення для мене не має сенсу ... публічний ключ не повинен бути необхідним крім приватного ключа, але чомусь MacOSX цього вимагає.

(спочатку з відповіді на аналогічне запитання на Apple Stack Exchange)


1

Я дуже рідко згадую про налаштування ~/.sshпапки - обмеження дозволів для каталогу.

Щоб включити SSH не запитує пароль , я завжди мав встановити дозвіл домашнього каталогу користувача в 700, і ~/.sshдозвіл папки до 700а.

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


0

Інша річ, яку ви могли б спробувати, була б замінити ssh-copy-idчимось подібним k="$(cat ~/.ssh/id_rsa.pub)"; ssh username@somehost.com "umask 0077; mkdir -p ~/.ssh; echo "$k" >> ~/.ssh/authorized_keys2".


0

Ця відповідь трохи не є вирішенням цього питання; однак це дуже близько (я закінчився цим питанням, шукаючи рішення своєї проблеми).

Я також роблю багато SSH для віддалених серверів на своєму Mac, як описано в цьому запитанні, однак Keychain Access.appдодаток зберігає ключову фразу, і мені не потрібно вводити її кожен раз, коли мені потрібен ключ для автентифікації на сервері SSH.

Однак я включив SSH-сервер на своєму Mac, щоб я міг віддалено підключитися до нього. Під час віддаленого входу на свій Mac, ключову фразу завжди запитували, коли я хотів SSH ще одним хостом.

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


Я записав своє подібне рішення тут superuser.com/a/659668/154113
orkoden

0

Я спантеличував цю проблему. ssh працює на кожній машині нашого відділу ВСІМО для яблук (MacBooks або iMacs не має значення). Нарешті я втомився вводити паролі і вирішив це налагодити.

Я перейшов до свого iMac та відключив sshd на панелі налаштувань спільного доступу. Потім я подав позов до root та набрав "/ usr / sbin / sshd -d", щоб запустити sshd у режимі налагодження. Потім я спробував перейти на цю машину, і вона негайно спробувала використати протокол 2, який, здається, використовує просто чудово, але sshd негайно повідомив, що не може знайти "дозволені_кейси". У мене був файл санкціонованого_keys2, який усі мої Linux, solaris, you-name-it unix-поля приймають чудово. Я просто скопіював санкціоновані_кейси2 в авторизовані_кільки та БОМ. Працює ідеально зараз.

Чому * клавіші, а не * клавіші2, невідомо. Особливо, коли os x цілком задоволений відомими_hosts2.

У будь-якому випадку, тепер усі наші яблучні скриньки можуть увійти в систему або виконати віддалені команди на них без того, щоб підірвати пароль: підкажіть ...

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