Как настроить SSH-доступ без пароля для пользователя root

Мне нужно настроить компьютер таким образом, чтобы установка программного обеспечения могла быть автоматизирована удаленно через SSH. Следующий вики-страница, я смог настроить SSH-ключи, чтобы мой пользователь мог получить доступ к компьютеру без пароля, но мне все равно нужно вручную вводить свой пароль, когда я использую sudo, чего, очевидно, автоматизированный процесс делать не должен.

Хотя мой /etc/ssh/sshd_config имеет PermitRootLogin yes, похоже, я не могу войти в систему с правами root, предположительно потому, что это не "настоящая" учетная запись с отдельным паролем.

Как мне настроить SSH-ключи, чтобы процесс мог удаленно входить в систему как root в Ubuntu?

Часть 1 : SSH-ключ без пароля

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

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

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

ssh-keygen -f foo

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

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

Далее вам нужно передать ключ на сервер. Самый простой способ - использовать ssh-copy-id . Для этого вы должны временно разрешить root подключаться к серверу по ssh.

На сервере (куда вы ПОДКЛЮЧАЕТЕСЬ ПО ssh)

редактировать /etc/ssh/sshd_config

sudo nano /etc/ssh/sshd_config

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

PasswordAuthentication yesPermitRootLogin yes

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

sudo service ssh restart

Установите пароль root, используйте надежный пароль

sudo passwd

На клиенте :

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

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

измените "foo" на имя вашего ключа и введите пароль root вашего сервера, когда его спросят.

Проверьте ключ

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

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

На сервере :

sudo passwd -l root

Редактировать /etc/ssh/sshd_config

sudo nano `/etc/ssh/sshd_config`

Измените следующее :

PasswordAuthentication noPermitRootLogin without-password

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

sudo service ssh restart

На клиенте (Тест):

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

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

Часть 2: Выполнение команд через sudo без ввода пароля

Вы настраиваете sudo так, чтобы он позволял вам запускать команды без пароля.

На этот вопрос дан ответ здесь в двух местах:

Из этих двух я предлагаю разрешить как можно меньше команд (первый ответ), а не все команды (второй ответ).

Вы путаете две разные вещи:

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

sudo используется, чтобы разрешить обычной учетной записи пользователя делать что-то с правами суперпользователя. Этот делает требуйте, чтобы пользователь ввел свой пароль. Это происходит независимо от того, подключены ли вы удаленно (через SSH без пароля или защищенный паролем) или находитесь локально на компьютере. Вы пытаетесь установить sudo чтобы не запрашивать ваш пароль, что не рекомендуется, но вы можете узнать, как это сделать, с помощью такого ответа, как https://askubuntu.com/a/74083/6161

Примечание для будущих читателей этого ответа:

Мой приведенный выше ответ не отвечает на фактический вопрос оригинального плаката, он описывает то, что вы должен сделай это вместо этого. Если ты действительно если вы хотите разрешить удаленные подключения непосредственно к учетной записи root, вам необходимо включить учетную запись root (см. Мой комментарий ниже). Еще раз позвольте мне сказать не разрешите удаленные удаленные входы в вашу учетную запись root.

В. Войдите на удаленный хост как пользователь root, используя SSH без пароля (например, ssh root@remotehost_ip)

A. Чтобы войти на удаленный хост в качестве пользователя root с помощью SSH без пароля, выполните следующие действия.

1-й Шаг:
Сначала вы должны предоставить общий доступ к открытому ключу локального пользователя с файлом authorized_keys корневого пользователя удаленного хоста. Есть много способов сделать это, вот один пример.

https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2

Или вы можете просто скопировать и вставить содержимое вашего открытого ключа в файл authorized_keys корневого пользователя удаленного хоста.

2 - й шаг:
Настройте ssh, чтобы разрешить вход без пароля на удаленном хосте. Войдите на удаленный хост и отредактируйте файл /etc/ssh/sshd_config, затем перезапустите службу ssh. Не забудьте прокомментировать "PermitRootLogin yes".

#vim /etc/ssh/sshd_configPermitRootLogin without-passwordStrictModes no#service ssh restart

Прокомментируйте #PermitRootLogin да

3-й шаг:
Проверьте подключение с вашего локального компьютера, используя пользователя, чей открытый ключ был предоставлен ранее.

$ssh root@remotehost_ip

PermitRootLogin определяет, разрешено ли пользователю с именем "root" (точнее: любому пользователю с UID 0) входить в систему. Если вы входите в систему от имени пользователя root, вам не нужно sudo для выполнения привилегированных задач.

С другой стороны, если вы входите в учетную запись пользователя и используете sudo без пароля вы должны настроить файл sudoers без необходимости возиться с /etc/ssh/sshd_config. Смотри Как заставить Ubuntu навсегда запомнить пароль после первого раза

Если вы автоматизируете установку с центрального компьютера, вы можете ограничить область действия ключа, чтобы он принимался только с данного хоста. Просто префикс строки в authorized_keys с from=“host.ip.goes.here” ssh-rsa […]

В конце концов, у этого вопроса плохое название. Пользователь уже может войти в систему через ssh с ключом без пароля, но теперь хочет запустить sudo без пароля. Я пересмотрел ответ, чтобы решить обе проблемы, поскольку этот вопрос связан с тем, как сгенерировать ssh-ключ без пароля (из-за плохого названия).

Не уверен, что кто-то еще уже ответил на этот вопрос, но у меня возникла аналогичная проблема при попытке git pull от пользователя root в том же окне. Мое решение состояло в том, чтобы настроить ssh-ключ для пользователя root и добавить его открытый ключ в файл authorised_keys для моего пользователя git. Жаль, что я не сделал этого раньше.