我正在尝试使用命令sudo -i -u postgres
来管理PostgreSQL,但Google Compute Engine虚拟机要求我输入我的账户密码(非root用户)。
由于我从未设置过密码,且通常通过SSH密钥登录到服务器,因此我不确定密码是什么,如何重置它或在哪里找到它。
请告诉我在哪里可以获取我的密码?
我正在尝试使用命令sudo -i -u postgres
来管理PostgreSQL,但Google Compute Engine虚拟机要求我输入我的账户密码(非root用户)。
由于我从未设置过密码,且通常通过SSH密钥登录到服务器,因此我不确定密码是什么,如何重置它或在哪里找到它。
请告诉我在哪里可以获取我的密码?
要在GCE VM上成为另一个非root用户,首先通过无需密码的sudo
(因为这是GCE VM映像中的sudo
配置方式)变成root
:
sudo su -
然后切换到您想要成为的用户或以另一个用户身份运行命令,例如,在您的情况下:
sudo -i -u postgres
$ 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。
在创建虚拟机时,在“输入完整密钥数据”框中指定ssh用户。
注意字段,所有字段都在一行上,由空格分隔:“协议密钥块用户名”。 对于用户名,您可以找到Windows用户名或类似“rsa-key-20191106”的字符串。您将用您选择的Linux用户名替换该字符串。
将公钥信息粘贴到“输入完整密钥数据”框中。
将第三个字段更改为您要在VM上创建的实际用户。例如,如果是“gcpuser”,则:
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAjUIG3Z8wKWf+TZQ7nVQzB4s8U5rKGVE8NAt/LxlUzEjJrhPI5m+8llLWYY2PH4atZzuIYvYR0CVWhZvZQzLQc33vDOjQohxV9Lg26MwSqK+bj6tsr9ZkMs2zqNbS4b2blGnr37+dnwz+FF7Es9gReqyPxL9bn5PU/+mK0zWMHoZSEfUkXBrgqKoMQTsYzbMERluByEpZm9nRJ6ypvr9gufft9MsWC2LPhEx0O9YDahgrCsL/yiQVL+3x00DO9sBOXxi8kI81Mv2Rl4JSyswh1mzGAsT1s4q6fxtlUl5Ooz6La693IjUZO/AjN8sZPh03H9WiyewowkhMfS0H06rtGQ== gcpuser
创建您的VM。(例如Debian)
连接到VM
注意您的公钥是否存在:
gcpuser@instance-1:~/.ssh$ cat authorized_keys
# Added by Google
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAjUIG3Z8wKWf+TZQ7nVQzB4s8U5rKGVE8NAt/LxlUzEjJrhPI5m+8llLWYY2PH4atZzuIYvYR0CVWhZvZQzLQc33vDOjQohxV9Lg26MwSqK+bj6tsr9ZkMs2zqNbS4b2blGnr37+dnwz+FF7Es9gReqyPxL9bn5PU/+mK0zWMHoZSEfUkXBrgqKoMQTsYzbMERluByEpZm9nRJ6ypvr9gufft9MsWC2LPhEx0O9YDahgrCsL/yiQVL+3x00DO9sBOXxi8kI81Mv2Rl4JSyswh1mzGAsT1s4q6fxtlUl5Ooz6La693IjUZO/AjN8sZPh03H9WiyewowkhMfS0H06rtGQ== gcpuser
注意您在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)
无需密码即可sudo到root
gcpuser@instance-1:~$ sudo -i -u root
root@instance-1:~#
注意sudoers文件:
root@instance-1:~# cat /etc/sudoers.d/google_sudoers
%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL
在“输入完整密钥数据”中指定用户名会产生以下结果:
chsh
命令。这不是特定于GCE的。 - Misha Brukmansudo
访问权限,因此您可以运行:sudo chsh -s /bin/dash $USER
— 我刚刚测试过了,它可以正常工作。 - Misha Brukmanchsh
命令总是要求输入密码,以及如何在更改自己的shell时不需要密码。此外,该帖子还链接到另一个答案,该答案解释了如何仅允许每个用户使用此功能,而不是全局适用于所有人。希望这可以帮助到你。 - Misha Brukman