Как настроить беспарольный доступ по SSH для пользователя root
Мне нужно настроить машину так, чтобы установка программного обеспечения могла быть автоматизирована удаленно через SSH. Следуя вики, я смог настроить ключи SSH, чтобы мой пользователь мог получить доступ к машине без пароля, но мне все равно нужно вручную вводить пароль при использовании sudo
что, очевидно, автоматизированный процесс не должен делать.
Хотя мой /etc/ssh/sshd_config
имеет PermitRootLogin yes
Я не могу войти в систему как root, предположительно, потому что это не "настоящая" учетная запись с отдельным паролем.
Как настроить ключи SSH, чтобы процесс мог удаленно войти в систему как пользователь root в Ubuntu?
4 ответа
Часть 1: ключ SSH без пароля
Чтобы установить SSH-соединение без пароля для пользователя root, вам необходимо иметь root-доступ на сервере. Самый простой способ - временно разрешить root входить через ssh через пароль. Так или иначе вам нужен root-доступ на сервере для этого. Если у вас нет корневого доступа на сервере, обратитесь за помощью к администратору сервера.
На клиенте (где ты сш из)
Сначала создайте ключ ssh без пароля. Я настоятельно рекомендую вам дать ему имя, а не по умолчанию
ssh-keygen -f foo
Опция -f указывает имя файла, например, foo, используйте любое имя, какое пожелаете.
Когда вас попросят ввести пароль, просто нажмите клавишу ввода, и вы сгенерируете ключ без пароля.
Далее необходимо передать ключ на сервер. Самый простой способ - это использовать ssh-copy-id
, Чтобы сделать это, вы должны временно разрешить root на 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 -i ~/.ssh/foo root@server
Часть 2: Запуск команд через sudo без ввода пароля
Вы настраиваете sudo, чтобы позволить вам запускать команды без пароля.
Это ответ здесь в двух местах:
Из этих двух я предлагаю разрешить как можно меньше команд (первый ответ), а не все команды (второй ответ).
Вы путаете две разные вещи:
Журнал без пароля используется для того, чтобы люди не могли войти в вашу систему удаленно, угадав ваш пароль. Если вы можете ssh username @ machine и подключиться без пароля, это настроено правильно и больше не имеет к этому никакого отношения.
sudo
используется для разрешения обычной учетной записи пользователя делать что-то с правами суперпользователя. Это требует от пользователя ввести свой пароль. Это происходит независимо от того, подключены ли вы удаленно (через SSH без пароля или защищенный паролем) или локально на машине. Вы пытаетесь установить sudo
не запрашивать пароль, что не рекомендуется, но вы можете узнать, как это сделать, с помощью ответа, например, /questions/592701/zapustite-apt-get-bez-sudo/592708#592708
Примечание для будущих читателей этого ответа:
Мой ответ выше не отвечает на настоящий вопрос автора плаката, он описывает, что вы должны сделать вместо этого. Если вы действительно хотите разрешить удаленные подключения напрямую к учетной записи root, вам нужно включить учетную запись root (см. Мой комментарий ниже). Опять же, позвольте мне сказать, НЕ разрешать удаленный вход в систему с учетной записью root.
Q. Войдите в систему на удаленном хосте как пользователь root, используя SSH без пароля (например, ssh root@remotehost_ip)
О. Для входа на удаленный хост от имени пользователя root с использованием SSH без пароля выполните следующие действия.
1-й шаг:
Сначала вы должны поделиться открытым ключом локального пользователя с файлом author_keys корневого пользователя удаленного хоста. Есть много способов сделать это, вот один пример.
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2
Или вы можете просто скопировать и вставить содержимое вашего открытого ключа в файл авторизованного пользователя 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
PermitRootLogin контролирует, разрешено ли пользователю с именем "root" (если быть точным: любой пользователь с UID 0) входить в систему. Если вы входите в систему как root, вам не нужно sudo
выполнять привилегированные задачи.
С другой стороны, если вам нужно войти в систему под учетной записью пользователя и использовать sudo
без пароля вы должны настроить файл sudoers без необходимости возиться с /etc/ssh/sshd_config
, Смотрите Как заставить Ubuntu навсегда запомнить пароль после первого раза