Как настроить SSH-ключи в Debian 11
Debian, SSH | Комментировать запись
SSH, или secure shell – это очень широко распространенный протокол шифрования, который используется для безопасного подключения к серверу. По всей вероятности, при работе со своим сервером Debian вы проведете большую часть времени в терминале, который как раз подключается к серверу по SSH.
В этом руководстве мы настроим ключи SSH на свежем сервере Debian. SSH-ключи – это простой и безопасный способ входа на сервер, который рекомендуется использовать для всех учетных записей.
1: Создание пары RSA ключей
Для начала на клиентской машине (обычно это ваш компьютер) нужно создать пару ключей:
ssh-keygen
По умолчанию команда ssh-keygen создает пару 2048-битных RSA-ключей. В большинстве случаев это достаточно надежные ключи (но вы можете добавить флаг -b 4096, чтобы сгенерировать более сложный 4096-битный ключ).
После запуска команды вы получите такой запрос:
Generating public/private rsa key pair. Enter file in which to save the key (/your_home/.ssh/id_rsa):
Нажмите Enter, чтобы сохранить ключи в файл .ssh/ в домашнем каталоге (при желании укажите другой каталог).
Если ранее вы уже создали пару ключей, на экране может появиться такой запрос:
/home/your_home/.ssh/id_rsa already exists. Overwrite (y/n)?
Важно! Если вы решите перезаписать старый ключ на диске, вы больше не сможете пройти аутентификацию по этому ключу. Будьте осторожны, выбирая yes: перезапись ключа – необратимый процесс.
После этого вы увидите:
Enter passphrase (empty for no passphrase):
В данное поле можно ввести сложную парольную фразу. Рекомендуем использовать эту возможность: дополнительный пароль повышает безопасность и предотвращает вход неавторизованных пользователей в систему.
Читайте также: Настройка аутентификации на основе SSH-ключей на сервере Linux
На экране появится:
Your identification has been saved in /your_home/.ssh/id_rsa. Your public key has been saved in /your_home/.ssh/id_rsa.pub. The key fingerprint is: SHA256:5E2BtTN9FHPBNoRXAB/EdjtHNYOHzTBzG5qUv7S3hyM root@debian-suricata The key's randomart image is: +---[RSA 3072]----+ | oo .O^XB| | . +.BO%B| | . = .+B+o| | o o o . =.| | S . . =| | o.| | .o| | E o..| | . ..| +----[SHA256]-----+
Теперь у вас есть пара ключей: открытый и закрытый. Ее можно использовать для аутентификации. Пора скопировать открытый ключ на сервер, чтобы настроить беспарольную аутентификацию на основе SSH-ключей.
2: Копирование открытого ключа на удаленный сервер
Проще всего скопировать открытый ключ на удаленный сервер при помощи утилиты ssh-copy-id.
Если на вашем сервере утилита ssh-copy-id не установлена, вы можете скопировать ключ одним из двух других методов –через парольную аутентификацию SSH или вручную (об этом мы поговорим ниже).
Копирование ключа с помощью ssh-copy-id
Утилита ssh-copy-id установлена в большинстве операционных систем по умолчанию, поэтому, скорее всего, она есть и у вас. Чтобы эта команда работала, вам нужен парольный SSH-доступ к вашему серверу.
Команде ssh-copy-id нужно передать удаленный хост, к которому вы хотите подключиться, и задать пользователя, к которому у вас есть SSH-доступ. В учетную запись этого пользователя и будет скопирован открытый SSH ключ.
Данная команда использует такой синтаксис:
ssh-copy-id username@remote_host
Введите свои данные и запустите команду. Вы получите такой результат:
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes
Это сообщение говорит, что локальный компьютер не распознал ваш удаленный сервер. При первом подключении к новому серверу такое случается почти всегда. Просто введите yes и нажмите Enter, чтобы продолжить.
Затем команда просканирует локальную запись пользователя в поисках ключа id_rsa.pub. Когда она найдет его, она запросит пароль удаленного пользователя:
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys username@203.0.113.1's password:
Введите этот пароль (из соображений безопасности при вводе в строке ничего не будет отображаться) и нажмите Enter. Команда подключится к пользователю на удаленном хосте и скопирует содержимое файла ~/.ssh/id_rsa.pub в его файл ~/.ssh/authorized_keys.
Вы увидите:
Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'username@203.0.113.1'" and check to make sure that only the key(s) you wanted were added.
Итак, ключ id_rsa.pub скопирован на удаленный сервер, а это значит, что вы можете приступать к главе 3.
Копирование открытого ключа через SSH
Если вы почему-то не можете использовать ssh-copy-id, но у вас есть SSH пароль для доступа к пользователю на удаленном сервере, скопируйте ключ с помощью простого SSH-подключения.
В этой задаче вам поможет команда cat, которая прочитает файл открытого SSH-ключа на локальном компьютере. Мы затем настроим конвейер, который передаст ключ по SSH. После выполнения команды мы убедимся, что каталог ~/.ssh существует в учетной записи удаленного пользователя, и проверим содержимое файла authorized_keys.
Используйте символ перенаправления >>, чтобы вставить новые данные, не перезаписывая текущее содержимое файла (это позволит нам добавлять в файл ключи, не удаляя из него добавленные ранее данные).
Необходимая команда выглядит так:
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
Вы можете увидеть на экране следующее сообщение:
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes
Это сообщение значит, что ваш локальный компьютер не распознает удаленный хост. При первом подключении к новому хосту подобное случается очень часто. Введите yes и нажмите Enter, чтобы продолжить.
Затем вам будет предложено ввести пароль удаленного пользователя:
username@203.0.113.1's password:
Получив пароль, команда сможет скопировать содержимое ключа id_rsa.pub в конец файла authorized_keys. Если все получилось, переходите к главе 3.
Копирование открытого ключа вручную
Если у вас почему-то нет ни парольного доступа, ни утилиты ssh-copy-id, вам придется выполнить весь процесс вручную: самостоятельно скопировать и вставить содержимое файла id_rsa.pub в файл ~/.ssh/authorized_keys на удаленном сервере.
Выведите на экран локального компьютера содержимое id_rsa.pub с помощью команды:
cat ~/.ssh/id_rsa.pub
Вы увидите ключ:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDgkLJ8d2gGEJCN7xdyVaDqk8qgeZqQ0MlfoPK3TzWI5dkG0WiZ16jrkiW/h6lhO9K1w89VDMnmNN9ULOWHrZMNs//Qyv/oN+FLIgK2CkKXRxTmbh/ZGnqOm3Zo2eU+QAmjb8hSsstQ3DiuGu8tbiWmsa3k3jKbWNWpXqY3Q88t+bM1DZrHwYzaIZ1BSA1ghqHCvIZqeP9IUL2l2DUfSCT9LXJEgMQhgjakJnzEGPgd5VHMR32rVrbIbbDzlyyoZ7SpCe5y0vYvbV2JKWI/8SEOmwehEHJ9RBZmciwc+1sdEcAJVMDujb9p5rX4hyvFpG0KGhZesB+/s7PdOa8zlIg4TZhXUHl4t1jpPC83Y9KEwS/Ni4dhaxlnr3T6l5hUX2cD+eWl1vVpogBqKNGBMrVR4dWs3Z4BVUf9exqTRRYOfgo0UckULqW5pmLW07JUuGo1kpFAxpDBPFWoPsg08CGRdEUS7ScRnMK1KdcH54kUZr0O88SZOsv9Zily/A5GyNM= demo@test
Любым доступным способом подключитесь к вашему удаленному серверу.
Убедитесь, что каталог ~/.ssh существует. Следующая команда создаст необходимый каталог (или не сделает ничего, если он уже есть):
mkdir -p ~/.ssh
В этом каталоге вы можете создать или изменить файл authorized_keys, а также добавить содержимое id_rsa.pub в конец файла с помощью команды:
echo public_key_string >> ~/.ssh/authorized_keys
Если файла authorized_keys не существует, команда его создаст.
Вместо public_key_string в вышеприведенной команде укажите результат команды cat ~/.ssh/id_rsa.pub (ее вы запускали в локальной системе). Он начинается с ssh-rsa AAAA ….
После этого нужно установить правильные разрешения на каталог ~/.ssh и файл authorized_keys.
chmod -R go= ~/.ssh
Данная команда заблокирует доступ к каталогу ~/.ssh/ для всех групп и других пользователей.
Если вы используете root-пользователя для настройки ключей другого пользователя, важно помнить вот что: каталог ~/.ssh должен принадлежать именно целевому пользователю, а не root.
chown -R 8host:8host ~/.ssh
Пора протестировать работу беспарольной аутентификации на сервере.
3: Аутентификация по SSH-ключам на сервере Rocky Linux
Когда открытый ключ скопирован на удаленный сервер, вы сможете залогиниться, не указывая пароля удаленного пользователя.
Введите эту команду:
ssh username@remote_host
Вы можете увидеть предупреждение, если подключаетесь к этому серверу впервые (допустим, если вы копировали ключ вручную):
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes
Значит, ваш локальный компьютер не распознает удаленный сервер, что вполне нормально для первого подключения. Просто введите yes и нажмите Enter.
Если вы не установили парольную фразу для закрытого ключа, вы сразу же попадете в систему. В противном случае именно сейчас вам будет предложено ввести его (обратите внимание, вводимая фраза не будет отображаться в терминале из соображений безопасности). Пройдя аутентификацию, вы получите доступ к удаленному пользователю.
Вы можете отключить парольную аутентификацию, чтобы повысить безопасность сервера, при условии, что аутентификация по ключам прошла успешно.
4: Отключение парольной аутентификации
Если вы успешно вошли на удаленный сервер с помощью SSH-ключей и без стандартного пароля, то вам лучше совсем отключить парольную аутентификации, чтобы защитить сервер от brute-force атак.
Примечание: Прежде чем выполнять этот раздел, убедитесь, что вы настроили аутентификацию по SSH-ключам для пользователя root или для пользователя с привилегиями sudo на данном сервере. Иначе вы можете случайно заблокировать себя на собственном сервере, отключив поддержку паролей.
Убедившись, что ваша удаленная учетная запись имеет все необходимые привилегии, войдите на сервер с помощью SSH-ключей (как root либо как sudo). Затем откройте конфиг демона SSH:
sudo nano /etc/ssh/sshd_config
Найдите директиву PasswordAuthentication. Она может быть закомментирована. Если это так, раскомментируйте эту строку и присвойте ей значение «no». Так вы отключите возможность входа в систему по паролю:
. . . PasswordAuthentication no . . .
Сохраните и закройте файл. Перезапустите sshd, чтобы обновить настройки:
sudo systemctl restart ssh
В качестве меры предосторожности откройте новое окно и проверьте работу сервиса SSH:
ssh username@remote_host
Теперь, когда вы уверены, что сервис SSH работает правильно, вы можете закрыть все текущие сессии.
Итак, на данный момент SSH поддерживает только аутентификацию по SSH-ключам. Парольная аутентификация успешно отключена.
Заключение
Аутентификация по SSH-ключам не только позволяет вам войти в систему без пароля вашего пользователя, но и обеспечивает более надежную защиту сервера.
Читайте также:
Tags: Debian, Debian 11, SSH