SSH (Secure Shell) обеспечивает безопасное удаленное соединение между системами. С помощью этого криптографического протокола можно управлять машинами, копировать или перемещать файлы на удаленном сервере через зашифрованные каналы.
Существует два способа входа в удаленную систему через SSH - с использованием аутентификации по паролю или аутентификации с открытым ключом (вход SSH без пароля).
Если коротко, то нам нужно сгенерировать пару ключей аутентификации (публичный и приватный) и её публичную часть добавить в файл ~/.ssh/authorized_keys
удаленных хостов.
Сервер OpenSSH
Прежде чем приступить к работе, нам необходимо убедиться в том, что у нас установлен сервер OpenSSH:
# Dedian/Ubuntu
sudo systemctl status ssh
# CentOS
sudo systemctl status sshd
Если после команды мы видим Active: active (running)
, то всё в порядке, сервер OpenSSH присутствует и запущен.
Для установки сервера нужно выполнить следующую команду:
# Dedian/Ubuntu
sudo apt install openssh-server
# CentOS
sudo yum install openssh-server
После установки проверяем статус и запускаем его если это необходимо, добавляем в автозагрузку:
##### Dedian/Ubuntu
# Статус
sudo systemctl status ssh
# Запустить
sudo systemctl start ssh
# Добавить в автозагрузку
sudo systemctl enable ssh
######## CentOS
# Статус
sudo systemctl status sshd
# Запустить
sudo systemctl start sshd
# Добавить в автозагрузку
sudo systemctl enable sshd
Проверка наличия ключей
Перед созданием новой пары ключей SSH сначала проверьте, есть ли у вас уже ключ SSH на вашем клиентском компьютере, потому что вы можете перезаписывать существующие ключи.
Выполните следующую команду, чтобы проверить наличие существующих ключей SSH:
ls -al ~/.ssh/id_*.pub
Если есть ключи, вы можете использовать их и пропустить следующий шаг или создать резервную копию старых ключей и сгенерировать новый.
Новая пара ключей SSH
Следующая команда сгенерирует новую пару ключей:
ssh-keygen
# Эквивалентно ssh-keygen
ssh-keygen -t rsa
## Усилить защиту. Длина ключа 4096 бит
ssh-keygen -t rsa -b 4096
# Короткий (более безопасный) ключ
ssh-keygen -t ed25519
# С вашим адресом электронной почты в качестве комментария
ssh-keygen t ed25519 -C "your_email@domain.com"
Посмотреть содержимое публичного клуча:
cat ~/.ssh/id_ed25519.pub
Копирование открытого ключа
Копируем публичную часть ключа на удалённый сервер можно следующими способами:
1 С помощью команды ssh-copy-id
(Предпочтительный способ):
ssh-copy-id [remote_username]@[server_ip_address]
После ввода пароля сгенерированный открытый ключ SSH будет добавлен в файл authorized_keys
удалённого компьютера. После добавления записи соединение закроется автоматически.
2 С помощью команды cat
cat ~/.ssh/id_ed25519.pub | ssh [remote_username]@[server_ip_address] "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
3 Третий метод немного сложнее, так как вам придётся всё делать вручную. Однако, вариант вполне рабочий и вы можете использовать его в отдельных случаях, когда другие методы не работают. Вам нужно будет вручную добавить содержимое файла id_ed25519.pub
в файл ~/.ssh/authorized_keys
удалённого сервера.
Смотрим содержимое файла id_ed25519.pub
cat ~/.ssh/id_ed25519.pub
Команда выведет ключ, он начинается с ssh-ed25519
. Скопируйте его. На удалённом сервере войдите в систему и создайте в корне директорию .ssh
, если она не существует:
mkdir -p ~/.ssh
Немного разберёмся с правами на файлы и папки.
~/.ssh
уже существует, то следует проверить права.
Следующие команды приведут всё в порядок:
chown -R $USER:$USER ~/.ssh
chmod 700 ~/.ssh
chmod 644 ~/.ssh/*
chmod 600 ~/.ssh/authorized_keys
Файл конфигурации OpenSSH на удалённом сервере
Чтобы добавить дополнительный уровень безопасности к серверу сделаем ещё несколько изменений. Откроем файл /etc/ssh/sshd_config
:
sudo nano /etc/ssh/sshd_config
Находим необходимые строки и изменяем их на:
# Запрещаем вход по паролю
PasswordAuthentication no
# Запрещаем вход пользователю root
PermitRootLogin no
# Задаём порт для подключения (Изменить на свой)
Port 29947
Открываем нужный порт:
iptables -I INPUT -p tcp --dport 29947 -j ACCEPT
Перезапускаем демона SSH:
# Dedian/Ubuntu/LMDE
sudo systemctl restart ssh
# CentOS
sudo systemctl restart sshd
Теперь можно подключиться так:
# Пример
ssh www-root@196.69.117.250 -p29947
Файл конфигурации на клиенте
Также вы можете на своем компьютере создать файл с настройками подключений:
touch ~/.ssh/config
Права на файл:
chmod 600 ~/.ssh/config
Открываем вышеуказанный файл и добавляем такую конфигурацию:
# Не забудьте подставить свои данные (Host, HostName, Port, User, IdentityFile)
Host myhost
HostName 196.69.117.250
Port 29947
User www-root
IdentityFile ~/.ssh/id_ed25519
Теперь, когда мы настроили подключение, выполняем команду:
# Подключаемся по ключу через ~/.ssh/config
ssh myhost
Если всё правильно сделано, то мы увидим аутентификацию по ключу, войдём на сервер без пароля.
Комментарии (3)
17.09.2023 в 10:42
20.09.2023 в 03:59
09.10.2023 в 17:46