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

37

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

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

Как настроить SSH-ключи, поэтому процесс может удаленно войти в систему с правами root на Ubuntu?

    
задан Cerin 22.03.2012 в 18:01
источник

4 ответа

42

EDIT bodhi.zazen У этого ответа были серьезные проблемы, и я пытаюсь перезаписать ответ, чтобы решить проблемы с исходным ответом.

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

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

--- На клиенте, т.е. где вы ssh FROM ---

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

ssh-keygen -f foo

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

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

Затем вам нужно перенести ключ на сервер. Самый простой способ - использовать 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, используйте strong

sudo passwd

--- Готово на сервере ---

От клиента, Перенесите ключ на сервер

ssh-copy-id -i ~/.ssh/foo [email protected]

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

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

ssh -i ~/.ssh/foo [email protected]

Предполагая, что он работает, отмените пароль 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 [email protected]

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

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

Здесь дается ответ в двух местах:

Как выполнять определенные команды sudo без пароль?

Как запустить команду sudo без пароля?

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

    
ответ дан bodhi.zazen 18.10.2017 в 17:34
источник
7

Вы смешиваете две разные вещи:

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

sudo используется, чтобы позволить нормальной учетной записи пользователя делать что-то с правами суперпользователя. Для этого требуется ввести пароль пользователя. Это происходит независимо от того, подключены ли вы удаленно (с помощью без пароля или с защитой паролем SSH) или являются локальными на машине. Вы пытаетесь установить sudo , чтобы не запрашивать пароль, что не рекомендуется, но вы можете узнать, как это сделать с помощью ответа типа Ссылка

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

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

ответ дан David Oneill 22.03.2012 в 18:09
2

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

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

    
ответ дан Lekensteyn 22.03.2012 в 18:10
1

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

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

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

Ссылка

Или вы можете просто скопировать содержимое открытого ключа в файл 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 yes

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

$ssh [email protected]_ip
    
ответ дан Aanokpe Rai 01.06.2016 в 07:31