Я использую Mac OS X Lion и захожу на удаленные хосты через SSH каждый день. Несмотря на то, что я использую пару ключей SSH для удаленной аутентификации и мне не нужно моторизовывать фразу входа каждого хоста, все равно очень раздражает, что терминал запрашивает фразу-пароль для доступа к моему секретному ключу SSH.
По соображениям безопасности, я думаю, необходима пароль для доступа к закрытому ключу SSH. Есть ли способ заставить терминал запрашивать фразу ровно один раз при запуске, затем запоминать ее и автоматически использовать мой закрытый ключ в последующих сеансах SSH?
Существует скрипт, keychain
который отлично работает на Gentoo Linux. Но я никогда не понимаю это на Mac OS X Lion. Более того, есть так много пугающих терминов, такие как ssh-agent
, ssh-add
. После прочтения различных материалов о тех инструментальных средствах SSH и некоторых разочарованных экспериментах я запутался.
Поэтому я пришел в StackExchange и искал несколько советов по следующим вопросам.
- Что
ssh-agent
,ssh-add
,keychain
,Keychain Access.app
и как они взаимодействуют друг с другом? - Как я могу ввести пароль для моего закрытого ключа SSH один раз при входе в систему и использовать его свободно при создании сеанса SSH позже?
- Errr ... Что не так с
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 на удаленный хост. Для примера я копирую ключ на локальный компьютер 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
Любая обратная связь приветствуется. Благодарность!
Ответы:
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
файл конфигурации:Если по какой-то причине он все еще не работает, вот «старый» способ запустить все вручную:
http://timesinker.blogspot.com/2007/08/getting-ssh-agent-going-on-mac-osx.html
Есть также это приложение, которое я прекратил использовать с тех пор, как вышел Leopard, но в основном делал то же самое в предыдущих версиях Mac OS X:
http://www.sshkeychain.org/
источник
~/tmp
указывающую/tmp/
и запускаю задачу cron для очистки~/tmp
каждые 2 часа, что также удаляло сокет ssh-agent. О, чувак, я ненавижу себя.В процессе решения «проблем», я гугл некоторых темы , связанные и записать некоторые заметки о том , как
ssh-agent
,ssh-add
,keychain
,KeyChain Access.app
работе. В конечном итоге выясняется, что эта проблема вообще не является проблемой, вместо этого проблема полностью во мне, и так называемый ssh-login-Without-ask-Passphrase-Every-Time отлично работает на Mac из коробки.Однако этот процесс приносит мне некоторый опыт. Я записываю свои записи здесь в надежде, что они помогут кому-то запутаться в этих терминах.
Два условия пароля:
passphrase
относится к необходимой фразе при доступе к вашему секретному ключу SSH.password
относится к необходимой фразе для входа на ваш Mac.Теперь я могу понять, что делают эти наборы инструментов, то есть
ssh-agent
,ssh-add
,keychain
,Keychain Access.app
на Mac.ssh-agent
является важной службой, позволяющей использовать закрытый ключ SSH без ввода пароля SSH.ssh-agent
работает таким образом. Сначала он хранит или кэширует ваш закрытый ключ SSH в основной памяти. Затем, позже в этом сеансе, когда ваш личный 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
хранилище.Две вещи заслуживают вашего внимания:
ssh-agent
сервис при запуске, прослушивая сокет под/tmp
.Keychain Access.app
сохраняет вашу парольную фразу SSH, поэтому она может добавить ваш закрытый ключ,ssh-agent
не прерывая вас. Да, нет необходимости вводить фразу SSH, но необходимо ввести пароль для входа в свою учетную запись Mac, чтобы предоставить привилегию при создании этой записи в первый раз.Итак, в итоге, SSH-login-без-спрашивающего-парольной фразы должен работать на Mac OS X из коробки.
источник
В случае, если другие решения здесь не работают для людей, мне помогло следующее.
Для каждого личного ключа в каталоге ~ / .ssh убедитесь, что соответствующий открытый ключ также присутствует. Убедитесь, что открытый ключ назван точно так же, как и закрытый ключ, но
.pub
в конце. Если у вас уже есть соответствующий открытый ключ, попробуйте восстановить его.Если вам нужно воссоздать открытые ключи, вы можете сделать это легко: -
заменить
my_key
на то, что ваш ключ называется.После этого MacOS запоминает ключевую фразу в связке ключей, как и должно быть.
Примечание. Ввод парольной фразы и ее сохранение в цепочке ключей теперь является однократным действием (не один раз за сеанс входа в систему, как требуется OP), но при условии, что вход на рассматриваемый компьютер Mac защищен паролем, тогда ваша пароль будет защищена этим паролем для входа. Кроме того, это решение не имеет смысла для меня ... открытый ключ не должен требоваться в дополнение к закрытому ключу, но по некоторым причинам MacOSX требует этого.
(изначально из ответа на аналогичный вопрос на Apple Stack Exchange)
источник
Одна вещь, о которой я редко упоминаю при настройке
~/.ssh
папки, - это ограничение прав доступа к каталогу.Чтобы включить ssh, чтобы не запрашивать пароль, мне всегда приходилось устанавливать разрешения для домашнего каталога пользователя
700
, а также~/.ssh
разрешения для папки700
.В противном случае он продолжает запрашивать у меня пароль, даже если у меня все ключи сгенерированы и скопированы правильно. Сообщение об ошибке генерируется в журналах аутентификации, но это по большей части невидимо для конечного пользователя.
источник
Еще одна вещь, которую вы могли бы попробовать - заменить
ssh-copy-id
на что-то вродеk="$(cat ~/.ssh/id_rsa.pub)"; ssh username@somehost.com "umask 0077; mkdir -p ~/.ssh; echo "$k" >> ~/.ssh/authorized_keys2"
.источник
Этот ответ не является решением этого вопроса; однако это очень близко (я остановился на этом вопросе во время поиска решения моей проблемы).
Я также делаю много SSH с удаленными серверами на моем Mac, как описано в этом вопросе, однако
Keychain Access.app
приложение сохранило ключевую фразу, и мне не нужно вводить ее каждый раз, когда мне нужен ключ для аутентификации на SSH-сервере.Тем не менее, я включил SSH сервер на своем Mac, чтобы я мог подключиться к нему удаленно. При удаленном входе в систему на моем Mac ключевая фраза всегда спрашивалась, когда я хочу использовать SSH еще один хост.
Я нашел решение, которое позволяет сохранить ключевую фразу для текущего сеанса. Я думал, что это может быть полезно для кого-то, следовательно, этот пост / ответ.
источник
Я ломал голову над этой проблемой. ssh работает на каждой машине в нашем отделе, КРОМЕ яблок (MacBooks или iMacs не имеет значения). Я, наконец, устал набирать пароли и решил отладить это.
Я пошел в свой iMac и отключил sshd в панели настроек общего доступа. Затем я получил root-права и набрал «/ usr / sbin / sshd -d», чтобы запустить sshd в режиме отладки. Затем я попытался подключиться к этой машине по протоколу ssh, и он быстро попытался использовать протокол 2, который, кажется, все использует просто отлично, но sshd сразу же сообщил, что не может найти «author_keys». У меня был файл author_keys2, который отлично подходит для всех моих коробок Linux, Linux, you-name-it. Я просто скопировал author_keys2 в авторизованные ключи и BOOM. Работает отлично сейчас.
Почему * keys вместо * keys2 неизвестно. Особенно когда os x вполне доволен известными_хостами2.
В любом случае, теперь во все наши яблочные ящики можно войти или выполнить удаленные команды без этого взломанного пароля: prompt ...
источник