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

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

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

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

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

решение1

Часть 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 yes
PermitRootLogin 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 no
PermitRootLogin without-password

Перезапустите сервер.

sudo service ssh restart

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

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

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

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

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

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

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

решение2

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

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

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

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

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

решение3

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

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

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

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

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

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

#vim /etc/ssh/sshd_config
PermitRootLogin without-password
StrictModes no

#service ssh restart

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

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

$ssh root@remotehost_ip

решение4

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

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

Связанный контент