如何获取sudo密码

15

我正在尝试使用命令sudo -i -u postgres来管理PostgreSQL,但Google Compute Engine虚拟机要求我输入我的账户密码(非root用户)。

由于我从未设置过密码,且通常通过SSH密钥登录到服务器,因此我不确定密码是什么,如何重置它或在哪里找到它。

请告诉我在哪里可以获取我的密码?

3个回答

32

要在GCE VM上成为另一个非root用户,首先通过无需密码的sudo(因为这是GCE VM映像中的sudo配置方式)变成root

sudo su -

然后切换到您想要成为的用户或以另一个用户身份运行命令,例如,在您的情况下:

sudo -i -u postgres

1
如果我想更改默认的 shell,该怎么办? - user
@user - 你可以像在适当的Linux发行版上一样操作,例如使用chsh命令。这不是特定于GCE的。 - Misha Brukman
1
在GCE中,您使用RSA密钥登录,而不是使用密码。据我所知,在Google计算VM中没有用户密码。 - user
1
@user — 由于您拥有无需密码的 sudo 访问权限,因此您可以运行:sudo chsh -s /bin/dash $USER — 我刚刚测试过了,它可以正常工作。 - Misha Brukman
1
@user - 这个答案解释了为什么chsh命令总是要求输入密码,以及如何在更改自己的shell时不需要密码。此外,该帖子还链接到另一个答案,该答案解释了如何仅允许每个用户使用此功能,而不是全局适用于所有人。希望这可以帮助到你。 - Misha Brukman

6
根据 https://cloud.google.com/compute/docs/instances,实例创建者和使用元数据 sshKeys 值添加的用户都自动成为帐户管理员,能够运行 sudo 而无需密码。因此,您不需要那个不存在的密码 - 您需要使用元数据 sshKeys 值添加!这样做的标准方法是,我引用同一页中的内容:
$ echo user1:$(cat ~/.ssh/key1.pub) > /tmp/a
$ echo user2:$(cat ~/.ssh/key2.pub) >> /tmp/a
$ gcloud compute project-info add-metadata --metadata-from-file sshKeys=/tmp/a

或者您可以使用Google开发者控制台进行类似的操作,如果您更喜欢这种方式,请参阅https://cloud.google.com/compute/docs/console#sshkeys


0

摘要

在创建虚拟机时,在“输入完整密钥数据”框中指定ssh用户。

详细信息

  1. 生成ssh密钥对并确定公钥:
    • 如果使用ssh-keygen,则为以“.pub”结尾的文件
    • 如果使用PuTTYgen,则为“用于粘贴的公钥...”框中的文本

注意字段,所有字段都在一行上,由空格分隔:“协议密钥块用户名”。 对于用户名,您可以找到Windows用户名或类似“rsa-key-20191106”的字符串。您将用您选择的Linux用户名替换该字符串。

  1. 将公钥信息粘贴到“输入完整密钥数据”框中。

  2. 将第三个字段更改为您要在VM上创建的实际用户。例如,如果是“gcpuser”,则:

    ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAjUIG3Z8wKWf+TZQ7nVQzB4s8U5rKGVE8NAt/LxlUzEjJrhPI5m+8llLWYY2PH4atZzuIYvYR0CVWhZvZQzLQc33vDOjQohxV9Lg26MwSqK+bj6tsr9ZkMs2zqNbS4b2blGnr37+dnwz+FF7Es9gReqyPxL9bn5PU/+mK0zWMHoZSEfUkXBrgqKoMQTsYzbMERluByEpZm9nRJ6ypvr9gufft9MsWC2LPhEx0O9YDahgrCsL/yiQVL+3x00DO9sBOXxi8kI81Mv2Rl4JSyswh1mzGAsT1s4q6fxtlUl5Ooz6La693IjUZO/AjN8sZPh03H9WiyewowkhMfS0H06rtGQ== gcpuser
    
  3. 创建您的VM。(例如Debian)

  4. 连接到VM

    • 直接从ssh或PuTTY(不是浏览器窗口)
    • 使用私钥
    • 指定用户
  5. 注意您的公钥是否存在:

    gcpuser@instance-1:~/.ssh$ cat authorized_keys
    # Added by Google
    ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAjUIG3Z8wKWf+TZQ7nVQzB4s8U5rKGVE8NAt/LxlUzEjJrhPI5m+8llLWYY2PH4atZzuIYvYR0CVWhZvZQzLQc33vDOjQohxV9Lg26MwSqK+bj6tsr9ZkMs2zqNbS4b2blGnr37+dnwz+FF7Es9gReqyPxL9bn5PU/+mK0zWMHoZSEfUkXBrgqKoMQTsYzbMERluByEpZm9nRJ6ypvr9gufft9MsWC2LPhEx0O9YDahgrCsL/yiQVL+3x00DO9sBOXxi8kI81Mv2Rl4JSyswh1mzGAsT1s4q6fxtlUl5Ooz6La693IjUZO/AjN8sZPh03H9WiyewowkhMfS0H06rtGQ== gcpuser
    
  6. 注意您在google-sudoers组中

    gcpuser@instance-1:~/.ssh$ id
    uid=1000(gcpuser) gid=1001(gcpuser) groups=1001(gcpuser),4(adm),30(dip),44(video),46(plugdev),1000(google-sudoers)
    
  7. 无需密码即可sudo到root

    gcpuser@instance-1:~$ sudo -i -u root
    root@instance-1:~#
    
  8. 注意sudoers文件:

    root@instance-1:~# cat /etc/sudoers.d/google_sudoers
    %google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL
    

结论

在“输入完整密钥数据”中指定用户名会产生以下结果:

  1. 在虚拟机中创建用户。
  2. 上传密钥到 ~/.ssh。
  3. 成为无需密码的sudo组成员。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接