Введение
Команда ssh-copy-id – это полезный инструмент для простой настройки аутентификации на основе SSH-ключей между серверами. Однако иногда при попытке использовать эту команду может возникнуть ошибка "/usr/bin/ssh-copy-id: error: no identities found". Это руководство проведет вас через шаги по устранению неполадок и решению этой проблемы, обеспечивая бесперебойный процесс аутентификации на основе SSH-ключей. К концу этой лабораторной работы вы поймете, как работает аутентификация по SSH-ключам, и сможете правильно настроить ее в своих системах.
Понимание аутентификации по SSH-ключам
Прежде чем мы углубимся в устранение ошибки "no identities found" (не найдено удостоверений), важно понять, что такое аутентификация по SSH-ключам и как она работает.
Что такое аутентификация по SSH-ключам?
Аутентификация по SSH-ключам (Secure Shell key authentication) – это метод безопасного входа в удаленные системы без необходимости каждый раз вводить пароль. Он использует пару криптографических ключей:
- Приватный ключ (private key), который остается на вашей локальной машине
- Публичный ключ (public key), который копируется на удаленный сервер
Когда вы пытаетесь подключиться к удаленному серверу, ваш SSH-клиент использует ваш приватный ключ для создания подписи. Сервер проверяет эту подпись, используя ваш публичный ключ, хранящийся в его файле authorized_keys. Если подпись действительна, вы получаете доступ без необходимости ввода пароля.
Что такое ssh-copy-id?
Команда ssh-copy-id – это утилита, которая упрощает процесс копирования вашего публичного ключа на удаленный сервер. Она добавляет ваш публичный ключ в файл ~/.ssh/authorized_keys на удаленном сервере, что позволяет осуществлять аутентификацию без пароля в будущих соединениях.
Давайте проверим, есть ли у вас уже какие-либо SSH-ключи в вашей системе. Выполните следующую команду в вашем терминале:
ls -la ~/.ssh
Если вы не видите никаких файлов или каталог .ssh не существует, не волнуйтесь - мы создадим все на следующем шаге.
Генерация SSH-ключей
Если у вас нет SSH-ключей или вы хотите создать новые, вы можете сгенерировать их с помощью команды ssh-keygen. Это часто является первым шагом в решении ошибки "no identities found" (не найдено удостоверений).
Создание новой пары SSH-ключей
Давайте сгенерируем новую пару SSH-ключей, выполнив следующую команду:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Эта команда:
-t rsaуказывает тип создаваемого ключа (RSA)-b 4096указывает длину бита (более сильное шифрование)-Cдобавляет комментарий (обычно адрес электронной почты), чтобы помочь идентифицировать ключ
Когда вы запустите эту команду, вам будет предложено:
- Введите местоположение файла для сохранения ключа (нажмите Enter, чтобы использовать местоположение по умолчанию
~/.ssh/id_rsa) - Введите парольную фразу (passphrase) (вы можете нажать Enter дважды, чтобы не использовать парольную фразу, но ее использование добавляет дополнительный уровень безопасности)
Вывод должен выглядеть примерно так:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/labex/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/labex/.ssh/id_rsa
Your public key has been saved in /home/labex/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:abcdefghijklmnopqrstuvwxyz1234567890ABCD your_email@example.com
The key's randomart image is:
+---[RSA 4096]----+
| |
| |
| |
| |
| |
| |
| |
| |
| |
+----[SHA256]-----+
Проверка создания SSH-ключа
Теперь давайте проверим, что ключи были созданы правильно:
ls -la ~/.ssh
Теперь вы должны увидеть в выводе как приватный ключ (id_rsa), так и публичный ключ (id_rsa.pub):
total 20
drwx------ 2 labex labex 4096 Sep 15 10:10 .
drwxr-xr-x 5 labex labex 4096 Sep 15 09:55 ..
-rw------- 1 labex labex 3389 Sep 15 10:10 id_rsa
-rw-r--r-- 1 labex labex 746 Sep 15 10:10 id_rsa.pub
-rw-r--r-- 1 labex labex 444 Sep 15 10:00 known_hosts
Давайте также посмотрим на содержимое вашего файла публичного ключа:
cat ~/.ssh/id_rsa.pub
Вывод должен быть одной строкой, начинающейся с ssh-rsa, за которой следует длинная строка символов и заканчивающаяся вашим адресом электронной почты или комментарием.
Теперь, когда мы подтвердили, что наши SSH-ключи существуют, мы можем перейти к следующему шагу: устранению неполадок и решению ошибки "no identities found" (не найдено удостоверений).
Понимание и устранение ошибки "No Identities Found" (Не найдено удостоверений)
Теперь, когда у нас есть наши SSH-ключи, давайте разберемся, почему возникает ошибка "no identities found" (не найдено удостоверений) и как ее исправить.
Распространенные причины ошибки
Ошибка "no identities found" (не найдено удостоверений) обычно возникает по одной из следующих причин:
- SSH-ключи не существуют
- SSH-ключи находятся не в местоположении по умолчанию
- SSH-ключи имеют неправильные разрешения
- Команда
ssh-copy-idне может найти ни одного публичного ключа для использования
Поскольку мы уже подтвердили, что наши SSH-ключи существуют в местоположении по умолчанию, давайте проверим разрешения.
Проверка и исправление разрешений SSH-ключей
SSH очень щепетилен в отношении разрешений файлов из соображений безопасности. Выполните следующую команду, чтобы проверить разрешения вашего каталога .ssh и его содержимого:
ls -la ~/.ssh
Для надлежащей безопасности:
- Каталог
.sshдолжен иметь разрешения 700 (rwx------) - Приватный ключ (
id_rsa) должен иметь разрешения 600 (rw-------) - Публичный ключ (
id_rsa.pub) должен иметь разрешения 644 (rw-r--r--)
Если ваши разрешения неверны, вы можете исправить их с помощью следующих команд:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
Правильное использование ssh-copy-id
Теперь давайте попробуем правильно использовать команду ssh-copy-id. Правильный синтаксис:
ssh-copy-id -i ~/.ssh/id_rsa.pub username@remote_host
Где:
-iуказывает файл идентификации (публичный ключ) для использованияusername– ваше имя пользователя на удаленном сервереremote_host– имя хоста или IP-адрес удаленного сервера
Для нашей лабораторной среды мы будем имитировать это, используя локальную машину. Запустите:
ssh-copy-id -i ~/.ssh/id_rsa.pub labex@localhost
Вам будет предложено ввести пароль удаленного пользователя.
Откройте окно терминала в среде рабочего стола (desktop environment), только в терминале среды рабочего стола будут установлены переменные среды.

Чтобы получить пароль, выполните следующую команду.
printenv | grep PASSWORD
Примечание: Вы должны выполнить эту команду в терминале среды рабочего стола, а не в терминале, который вы открыли из верхней строки меню.
Эта команда отобразит все переменные среды, содержащие "PASSWORD". Найдите строку, в которой говорится LABEX_PASSWORD=.... Символы после знака равенства – это ваш пароль.
Вы должны ввести этот пароль, и публичный ключ будет скопирован на удаленный сервер.
Если вы видите сообщение типа "Number of key(s) added: 1" (Количество добавленных ключей: 1), значит, ваш ключ был успешно скопирован.
Проверка аутентификации по SSH-ключу
Теперь, когда мы устранили ошибку "no identities found" (не найдено удостоверений) и успешно скопировали наш SSH-ключ на удаленный сервер, давайте проверим, что аутентификация по SSH-ключу работает правильно.
Тестирование аутентификации по SSH-ключу
В реальной среде вы бы протестировали аутентификацию по SSH-ключу, подключившись к удаленному серверу:
ssh username@remote_host
Если ваш SSH-ключ настроен правильно, вы должны иметь возможность войти в систему без ввода пароля (если только вы не установили парольную фразу (passphrase) для своего ключа, в этом случае вам нужно будет ее ввести).
Для нашей лабораторной среды мы можем протестировать, попытавшись подключиться по SSH к localhost:
ssh labex@localhost
Если вы получите запрос с просьбой подтвердить соединение (потому что localhost нет в вашем файле known hosts), введите yes.
Вы можете увидеть сообщение, подобное следующему:
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:abcdefghijklmnopqrstuvwxyz1234567890ABCD.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Если вас попросят ввести пароль, это означает, что аутентификация по SSH-ключу еще не работает. Но если вы успешно войдете в систему без ввода пароля, ваша аутентификация по SSH-ключу работает правильно.
Распространенные проблемы и решения при аутентификации по SSH-ключу
Если у вас все еще возникают проблемы с аутентификацией по SSH-ключу, вот некоторые распространенные проблемы и решения:
Конфигурация SSH-сервера (SSH Server Configuration): SSH-сервер должен быть настроен на разрешение аутентификации по открытому ключу (public key authentication). Обычно это включено по умолчанию, но вы можете проверить, изучив файл
/etc/ssh/sshd_configна удаленном сервере:grep PubkeyAuthentication /etc/ssh/sshd_configОн должен показывать
PubkeyAuthentication yes.Владение файлами (File Ownership): Ваш домашний каталог и каталог
.sshдолжны принадлежать вам:ls -ld ~ ~/.sshОба должны показывать ваше имя пользователя в качестве владельца.
Отладка SSH-соединения (Debug SSH Connection): Вы можете использовать подробный флаг (verbose flag) для отладки SSH-соединений:
ssh -v labex@localhostЭто покажет подробную информацию о процессе аутентификации, которая может помочь выявить проблему.
Рекомендации по управлению SSH-ключами (SSH Key Management Best Practices)
Вот некоторые рекомендации по управлению SSH-ключами:
- Используйте парольную фразу (Use a passphrase): При создании SSH-ключа рассмотрите возможность использования парольной фразы для повышения безопасности.
- Разные ключи для разных серверов (Different keys for different servers): Для повышения безопасности рассмотрите возможность использования разных ключей для разных серверов или целей.
- Резервное копирование ключей (Backup your keys): Храните резервные копии своих SSH-ключей в безопасном месте.
- Регулярно обновляйте ключи (Regularly rotate keys): Для конфиденциальных сред рассмотрите возможность периодического обновления своих SSH-ключей.
Следуя этим шагам и рекомендациям, вы можете обеспечить надежную и безопасную работу аутентификации по SSH-ключу.
Итог (Summary)
В этой лабораторной работе вы научились устранять неполадки и разрешать ошибку "no identities found" (не найдено удостоверений) при использовании команды SSH copy-id. Мы рассмотрели:
- Понимание аутентификации по SSH-ключу и принципов работы команды ssh-copy-id
- Генерация пар SSH-ключей с помощью команды ssh-keygen
- Проверка и исправление разрешений SSH-ключей
- Правильное использование ssh-copy-id для копирования вашего открытого ключа (public key) на удаленный сервер
- Тестирование и проверка аутентификации по SSH-ключу
- Распространенные проблемы и рекомендации по управлению SSH-ключами
Обладая этими навыками, вы теперь можете настраивать безопасные SSH-соединения между системами без пароля, что необходимо для эффективного администрирования системы и автоматизации. Аутентификация по SSH-ключу не только обеспечивает лучшую безопасность, чем аутентификация по паролю, но и упрощает процесс входа в систему для законных пользователей.
Помните, что надлежащая защита ваших SSH-ключей имеет решающее значение, поскольку они обеспечивают прямой доступ к вашим системам. Всегда храните свои закрытые ключи (private keys) в безопасности и рассмотрите возможность использования парольных фраз (passphrases) для дополнительной защиты.



