
Мне нужно настроить машину так, чтобы установка программного обеспечения могла быть автоматизирована удаленно через 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 навсегда запомнить пароль после первого раза