Как исправить ошибку 'No Identities Found' в SSH Copy-ID

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Команда 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 "[email protected]"

Эта команда:

  • -t rsa указывает тип создаваемого ключа (RSA)
  • -b 4096 указывает длину бита (более сильное шифрование)
  • -C добавляет комментарий (обычно адрес электронной почты), чтобы помочь идентифицировать ключ

Когда вы запустите эту команду, вам будет предложено:

  1. Введите местоположение файла для сохранения ключа (нажмите Enter, чтобы использовать местоположение по умолчанию ~/.ssh/id_rsa)
  2. Введите парольную фразу (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 [email protected]
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" (не найдено удостоверений) обычно возникает по одной из следующих причин:

  1. SSH-ключи не существуют
  2. SSH-ключи находятся не в местоположении по умолчанию
  3. SSH-ключи имеют неправильные разрешения
  4. Команда 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), только в терминале среды рабочего стола будут установлены переменные среды.

Retrieve Password

Чтобы получить пароль, выполните следующую команду.

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-ключу, вот некоторые распространенные проблемы и решения:

  1. Конфигурация SSH-сервера (SSH Server Configuration): SSH-сервер должен быть настроен на разрешение аутентификации по открытому ключу (public key authentication). Обычно это включено по умолчанию, но вы можете проверить, изучив файл /etc/ssh/sshd_config на удаленном сервере:

    grep PubkeyAuthentication /etc/ssh/sshd_config

    Он должен показывать PubkeyAuthentication yes.

  2. Владение файлами (File Ownership): Ваш домашний каталог и каталог .ssh должны принадлежать вам:

    ls -ld ~ ~/.ssh

    Оба должны показывать ваше имя пользователя в качестве владельца.

  3. Отладка SSH-соединения (Debug SSH Connection): Вы можете использовать подробный флаг (verbose flag) для отладки SSH-соединений:

    ssh -v labex@localhost

    Это покажет подробную информацию о процессе аутентификации, которая может помочь выявить проблему.

Рекомендации по управлению SSH-ключами (SSH Key Management Best Practices)

Вот некоторые рекомендации по управлению SSH-ключами:

  1. Используйте парольную фразу (Use a passphrase): При создании SSH-ключа рассмотрите возможность использования парольной фразы для повышения безопасности.
  2. Разные ключи для разных серверов (Different keys for different servers): Для повышения безопасности рассмотрите возможность использования разных ключей для разных серверов или целей.
  3. Резервное копирование ключей (Backup your keys): Храните резервные копии своих SSH-ключей в безопасном месте.
  4. Регулярно обновляйте ключи (Regularly rotate keys): Для конфиденциальных сред рассмотрите возможность периодического обновления своих SSH-ключей.

Следуя этим шагам и рекомендациям, вы можете обеспечить надежную и безопасную работу аутентификации по SSH-ключу.

Итог (Summary)

В этой лабораторной работе вы научились устранять неполадки и разрешать ошибку "no identities found" (не найдено удостоверений) при использовании команды SSH copy-id. Мы рассмотрели:

  1. Понимание аутентификации по SSH-ключу и принципов работы команды ssh-copy-id
  2. Генерация пар SSH-ключей с помощью команды ssh-keygen
  3. Проверка и исправление разрешений SSH-ключей
  4. Правильное использование ssh-copy-id для копирования вашего открытого ключа (public key) на удаленный сервер
  5. Тестирование и проверка аутентификации по SSH-ключу
  6. Распространенные проблемы и рекомендации по управлению SSH-ключами

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

Помните, что надлежащая защита ваших SSH-ключей имеет решающее значение, поскольку они обеспечивают прямой доступ к вашим системам. Всегда храните свои закрытые ключи (private keys) в безопасности и рассмотрите возможность использования парольных фраз (passphrases) для дополнительной защиты.