Я создал новую виртуальную машину Google Compute Engine (Debian 9) и открыл для нее оболочку с помощью оболочки GoogleCloud. Я могу sudo из этого окна браузера оболочки.

Затем я настраиваю свои ssh-ключи и ssh в виртуальную машину. Ради обсуждения, мое имя пользователя "user123". Я SSH в мой GCP VM с помощью:

ssh user123@1.2.3.4

Где 1.2.3.4 - мой внешний IP-адрес GCP. Затем я вошел в систему.

Так как пользователь user123 в GoogleCloudShell sudo работает, но при входе через ssh от имени user123 у меня запрашивается пароль.

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for user123:

Естественно, я не хочу или не нужно устанавливать пароль, мне нужно получить sudo, чтобы разрешить этой учетной записи user123 пользователя sudo. Но это работает при входе в GoogleCloudShell .... Hum ... Я разберусь, но это мой вопрос.

ПРИМЕЧАНИЕ. Поскольку у меня есть root в моем GoogleCloudShell (через sudo), я должен найти то, что мне нужно сделать, и исправить это.

Какой следующий шаг мне нужно предпринять, чтобы позволить sudo работать при входе через ssh?

2 ответа2

1

Я дам вам 2 ответа.

Во-первых, облачная оболочка управляет метаданными экземпляров для вас за кулисами и позволяет использовать sudo без пароля для всех пользователей, добавленных в проект таким образом. Используйте Google, чтобы настроить вашего пользователя

https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys https://cloud.google.com/compute/docs/instances/managing-instance-access

Добавьте учетную запись пользователя, которую вы хотите через консоль проекта. Это распространит этого пользователя на все хосты в вашем проекте.

Во-вторых, вам нужно настроить sudo без пароля. Вы можете (используя visudo) отредактировать /etc /sudoers или создать новый файл в /etc/sudoers.d и добавить следующую строку:

user123       ALL = (ALL) NOPASSWD: ALL

Вы можете видеть, что Google делает это путем членства в группе в группе Google-sudoers

timmy@instance-1:~$ sudo cat /etc/sudoers.d/google_sudoers 
%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL
timmy@instance-1:~$ id
uid=1000(timmy) gid=1001(timmy) groups=1001(timmy),4(adm),30(dip),44(video),46(plugdev),1000(google-sudoers)
0

После создания вычислительного движка GCP вам не нужно делать ничего особенного, чтобы заставить sudo работать с ssh. Вам, очевидно, нужно использовать консоль GCP и добавить свои ключи, как @TimmyBrowne упоминает в своем посте. См. Https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys.

После того, как ваш открытый ключ ssh введен в экземпляр GCP Compute Engine, вы можете включить ssh в свой экземпляр. Но вам нужно использовать правильное имя пользователя.

Например, если мое имя пользователя GCP - fredsmith, а мой внешний IP-адрес GCP - 5.6.7.8, то моя команда ssh будет выглядеть так:

ssh fredsmith@5.6.7.8

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

После входа в систему вы можете запустить sudo, и он работает, потому что GCP уже настроил этот экземпляр с вашими учетными данными (fredsmith) и поместил вас (fredsmith) в группы, необходимые для работы sudo, которая для GCP кажется google-sudoers.

Если вы хотите создать другого пользователя и позволить этому пользователю иметь права sudo, то посмотрите ответ @TimmyBrowne, который описывает это.

Я до сих пор не уверен, почему у меня были противоречивые результаты, из-за которых иногда я мог судить, а иногда я не мог, потому что мой файл authorized_keys был удален, но у меня нет достаточно информации, чтобы продолжить это.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .