Одним из полезных инструментов SSH является ssh-copy-id, который используется для установки ключа SSH на удаленном сервере для входа на сервер без предоставления пароля для входа. Таким образом, с помощью этого инструмента можно легко реализовать единый вход и автоматический вход без пароля с использованием SSH. Он копирует открытые ключи в файл ~/.ssh/authorized _keys удаленного хоста, создавая файл и каталог, если требуется, но не изменяет разрешения любого существующего файла или папки. В этой статье объяснено, как можно использовать команду ssh-copy-id для SSH-соединения.
Перед тем, как приступить к действиям этой статьи, необходимо выполнить следующие действия.
Включите службу SSH в Ubuntu, если она не была включена ранее.
Сгенерируйте пары ключей SSH для выполнения команд на удаленном сервере. Выполните следующую команду, чтобы создать открытый и закрытый ключи. Закрытый ключ будет храниться на удаленном сервере, а открытые ключи будут надежно храниться на клиенте.
$ ssh-keygen -t rsa
Выполните следующую команду, чтобы открыть файл sshd_config с помощью редактора nano и добавить некоторые необходимые конфигурации.
$ sudo nano /etc/ssh/sshd_config
Добавьте в файл следующие строки, чтобы включить учетную запись root и аутентификацию на основе пароля.
PasswordAuthentication yes PermitRootLogin yes
Выполните следующую команду, чтобы перезапустить службу SSH.
$ sudo service ssh restart
Синтаксис команды ssh-copy-id приведен ниже. Он поддерживает несколько параметров, которые будут объяснены позже.
ssh-copy-id [-lv] [-i keyfile] [-o option][-p port] [user@]hostname
В этой части статьи описаны цели использования различных параметров команд ssh-copy-id.
Вариант | Цель |
-i keyfile | Он используется для копирования открытого ключа, хранящегося в файле . Его можно использовать несколько раз. |
-l | Он используется для копирования ключей, которые в настоящее время хранятся у ssh-agent. Он используется по умолчанию, если не указана опция -i. |
-o ssh-option | Он используется для передачи параметра напрямую ssh . Его можно использовать несколько раз. |
-p port | Он используется для подключения к указанному порту на удаленном хосте вместо порта по умолчанию, который равен 22. |
-v | Он используется для передачи значения -v в ssh. |
Вы должны авторизовать открытый ключ на сервере для установления SSH-соединения без использования пароля. После создания открытого ключа команда ssh-copy-id может добавить ключ в качестве авторизованного ключа на сервер.
Выполните следующую команду на сервере, чтобы добавить любой вновь созданный открытый ключ в качестве авторизованного ключа сервера.
$ ssh-copy-id andreyex@andreyex-VirtualBox
Ранее упоминалось, что параметр -i используется с командой ssh-copy-id для добавления открытого ключа из файла. Если вы сохранили вновь созданный открытый ключ в файле по умолчанию, имя файла будет id_rsa.pub . Но вы задали любое имя файла при создании пар ключей, а затем используйте это имя файла с параметром -i. Я сохранил открытый ключ в файле по умолчанию.
Выполните следующую команду на сервере, чтобы добавить открытый ключ на сервер. Команда скопирует ключ на сервер и настроит его для добавления ключа в файл authorized_keys для доступа к серверу.
$ ssh-copy-id -i ~/.ssh/id_rsa andreyex@andreyex-VirtualBox
После добавления ключа к серверу вы должны проверить, может ли клиентская машина подключиться к серверу. Имя пользователя серверной машины здесь «andreyex», а клиентской машины — «master». Итак, сначала войдите на клиентский компьютер, чтобы проверить соединение.
Выполните следующую команду, чтобы добавить идентификатор сервера на клиентский компьютер.
$ ssh-add
Выполните следующую команду ssh без какой-либо опции, чтобы установить соединение с сервером. Если на сервере включена аутентификация на основе пароля, пользователь должен предоставить действующий пароль для установления соединения с сервером.
$ ssh andreyex@andreyex-VirtualBox
Следующие выходные данные показывают, что идентификатор сервера был добавлен к клиентской машине. Затем пароль пользователя сервера запросил соединение, потому что здесь на сервере включена аутентификация на основе пароля. Имя пользователя изменяется на «andreyex» с «master» в командной строке, что указывает на то, что соединение было установлено правильно после ввода действительного пароля.
Если вы хотите указать имя файла открытого ключа с указанием места для установления соединения с сервером, выполните следующую команду ssh с параметром -i. Это потребует, если вы сохраните открытый ключ в определяемом пользователем имени файла. Во время генерации ключа я использовал имя файла по умолчанию — id_rsa.
$ ssh -i ~/.ssh/id_rsa andreyex@andreyex-VirtualBox
Как и прежде, он запросит пароль, чтобы установить соединение с сервером. Выходные данные показывают, что соединение было установлено правильно, и имя пользователя командной строки изменилось. Вы можете изменить файл конфигурации сервера, чтобы отключить аутентификацию на основе пароля, если вы не хотите предоставлять пароль всякий раз, когда вы хотите подключиться к серверу.
Использование команды ssh-copy-id для подключения к удаленному хосту было описано в этой статье с использованием двух учетных записей пользователей локального хоста, чтобы помочь читателям правильно узнать функцию этой команды.