Вход на сервер по SSH-ключу без пароля

Чтобы настроить SSH-соединение без пароля для пользователя root, вам необходимо иметь root-доступ на сервере. Самый простой способ — это временно разрешить root входить в систему по ssh с помощью пароля. Так или иначе, для этого вам нужен root-доступ на сервере. Если у вас нет root-доступа на сервере, обратитесь за помощью к администратору сервера.

Далее даётся рекомендация как сделать новый ключ для подключения к серверам от пользователя root, и эти ключи хранить у себя только для доступа к своим серверам. Заметьте, не свой ключ, своего пользователя, а именно выделенный для этого отдельный ключ. Но почитав ниже, вы сможете понять как сделать так, чтобы было удобнее для вас.

На клиенте (откуда вы подключаетесь по ssh)

Сначала создайте ssh-ключ без пароля. Я настоятельно рекомендую вам дать ему имя, а не использовать значение по умолчанию

ssh-keygen -f foo

Параметр -f указывает имя файла, foo является примером, используйте любое имя, которое вы пожелаете. Ну например: ~/.ssh/id_root

Для особо одарённых покажу пример моего варианта: ssh-keygen -f ~/.ssh/id_root

Когда вам будет предложено ввести пароль, просто нажмите клавишу enter, и вы сгенерируете ключ без пароля.

Далее вам нужно передать ключ на сервер.

Самый простой способ — использовать ssh-copy-id.

Для этого вы должны временно разрешить root подключаться к серверу по паролю ssh. Если это временное разрешение ходить по паролю вы оставите, то через некоторое время, вместе с вами будет весь мир подключаться к вашему серверу.

На сервере (куда вы подключаетесь по ssh)

Редактируйте /etc/ssh/sshd_config

sudo nano /etc/ssh/sshd_config

Здесь предложен редактор nano, который есть в каждом Ubuntu-Server. Комбинация клавиш, чтобы Сохранить [CTRL+O], Выйти [CTRL+X].
И совет: читайте справку, чтоб знать что нажимать.

Убедитесь, что вы разрешаете root входить по паролю в систему со следующим синтаксисом:

PermitRootLogin yes
PasswordAuthentication yes

Перезагрузите сервис ssh

sudo service sshd restart

Установите пароль root, используйте надежный пароль (типа такого по сложности, но не именно такой же ;-) U3MiXX^&G@aaX73M )

sudo passwd

На клиенте:

От клиента передайте ключ на сервер:

ssh-copy-id -i ~/.ssh/foo root@ip-server

Измените «foo» на имя вашего ключа и введите пароль root вашего сервера, когда его спросят. Также здесь и далее «ip-server» это ip-адрес вашего сервера.

Проверьте вход с вашим ключом:

ssh -i ~/.ssh/foo root@ip-server

Предполагая, что это работает, сбросьте пароль root и отключите вход с паролем.

Это сделать на сервере:

sudo passwd -l root

Редактируйте /etc/ssh/sshd_config:

sudo nano `/etc/ssh/sshd_config`

Всегда делайте резервную копию редактируемых файлов конфигураций чего-либо.

Измените следующее (раскомметируйте):

PermitRootLogin without-password
PasswordAuthentication no

Рекомендуется всегда держать открытое окно с действующим соединением, на всякий случай, если в том где вы проводите настройки, что-то не получится. То через это резервное соединение вы сможете, что-то вернуть.

Перезагрузите сервис ssh:

sudo service sshd restart

На клиенте:

Теперь вы должны иметь возможность входить по ssh со своим ключом без пароля, и вы не должны иметь возможности входить по ssh как любой пользователь без ключа.

ssh -i ~/.ssh/foo root@ip-server

Пожалуй всё.


P.S. Простите за словоблудие, просто особо одарённые пользователи из мира винды просили тут немного больше пояснений.