Конфигурация клиента
Настроить ~/.ssh/config
Настройка записей для хоста ssh
действительно проста и избавит вас от многих хлопот. Вот пример:
Host digitaloceanbox
Hostname 111.111.111.111
User root
PubKeyAuthentication yes
IdentityFile /home/user/.ssh/digitalocean-rsa
ForwardX11 yes
Host github github.com
Hostname github.com
User git
PubKeyAuthentication yes
IdentityFile /home/user/.ssh/github-rsa
ForwardX11 no
В этом примере мы настроили digitaloceanbox
и так github
и github.com
так, чтобы мы могли выполнять следующие команды:
ssh github
ssh digitaloceanbox
Если мы хотим войти в систему под другим пользователем, чем тот, который указан в файле конфигурации, мы просто user@
добавим в начало:
Генерация ssh
ключей
ssh-keygen -t rsa -b 4096 -C user@homemachine
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): /home/user/.ssh/digitalocean-rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/digitalocean-rsa
Your public key has been saved in /home/user/.ssh/digitalocean-rsa.pub.
The key fingerprint is:
SHA256:p9PYE/tveF2n//bLbp3ogYDtMtYEC5ziQiPxeob6fbo user@homemachine
Обратите внимание, что я указал полный путь к закрытому ключу, который я хочу сгенерировать при запросе ssh-keygen
. Я также определил комментарий ( -C
), который позволяет мне легко идентифицировать ключи на удаленных машинах.
Это создаст два файла:
.ssh/digitalocean-rsa
- ЧАСТНЫЙ ключ. Никогда не разделяй это .
.ssh/digitalocean-rsa.pub
- Открытый ключ. Это то, что вы храните на сервере для аутентификации.
Когда вы предоставляете свой ssh
ключ, убедитесь, что это .pub
версия! Когда вы добавляете в свой ~/.ssh/config
, обязательно добавьте правильный закрытый ключ, который соответствует публичному ключу, который вы добавили в систему.
Конфигурация сервера
Большинство установок будут поставляться с включенной аутентификацией с открытым ключом. Однако, если вы начнете делать что-то невообразимо, у вас могут возникнуть некоторые проблемы. В тех случаях, когда у OP есть проблема, я рекомендую, чтобы OP удалял /root/.ssh/
каталог, чтобы начать все сначала.
Не рекомендуется использовать ssh
для доступа пользователя root в удаленной системе. Рекомендуется ssh
войти в другого пользователя, а затем перейти в root с помощью пароля ( sudo su -
).
Добавьте ключи к хосту используя ssh-copy-id
Независимо от того, решите ли вы создать другого пользователя и использовать его в ssh
качестве этого пользователя или пользователя root, рекомендуется разместить ssh
ключи на сервере следующим образом:
ssh-copy-id -i /home/user/.ssh/digitalocean-rsa.pub user@digitaloceanbox
Это позволяет sshd
создавать каталог и необходимые файлы с необходимыми разрешениями. Это означает, что у вас нет шансов испортить разрешения или необходимость помнить детали. Просто используйте инструмент для загрузки ключей.
Отключить аутентификацию по паролю
При этом после того, как вы сами запомнили ключ и убедились, что можете подключиться с помощью ключей, рекомендуется отключить аутентификацию по паролю sshd
и перезапустить службу:
- редактировать
/etc/ssh/sshd_config
PasswordAuthentication no
sudo systemctl restart sshd
А как насчет новых пользователей?
Если вы отключите проверку подлинности по паролю, как вы можете подключить новых пользователей? Одним из способов является добавление файлов шаблонов в /etc/skel
каталог. После того, как вы указали одного пользователя, сделайте следующее:
sudo cp -r .ssh/ /etc/skel/
ls /etc/skel/.ssh
- Отредактируйте все найденные файлы
/etc/skel/.ssh/
так, чтобы они были пустыми, если вы не хотите автоматически вводить ключи для каждого вновь созданного пользователя.
Когда вы создаете новых пользователей sudo useradd -m newuser
, у этого пользователя будет тот .ssh/authorized_keys
, который вы можете редактировать, и у вас будут соответствующие разрешения.
Отладка
Вы можете посмотреть sshd
файл журнала, чтобы увидеть, почему соединения не работают или получают отказ:
sudo tail -f /var/log/auth.log
Пока вы запускаете эту команду, используйте другой терминал для попытки входа в систему. Часто предоставляемые сообщения достаточно хороши, чтобы помочь определить проблему или найти решение в Интернете.