如何获取sudo的密码
How to get password for sudo
我正在尝试对 PostgreSQL 使用命令 sudo -i -u postgres
,但 Google Compute Engine VM 要求我提供我的帐户(不是 root)的密码。
由于我从未设置过密码,而且我总是通过 SSH 密钥登录到我的服务器,所以我不确定密码是什么、如何重设密码或在哪里可以找到它。
请告诉我在哪里可以得到我的密码?
根据 https://cloud.google.com/compute/docs/instances ,
The instance creator and any users that were added using the metadata
sshKeys value are automatically administrators to the account, with
the ability to run sudo without requiring a password.
所以您不需要那个不存在的密码——您需要 "added using the metadata sshKeys value"!这样做的规范方式,我引用了同一页:
$ 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。
要成为 GCE VM 上的另一个非根用户,首先通过无密码 sudo
成为 root
(因为这就是 sudo
在 GCE VM 映像上的配置方式):
sudo su -
然后切换到你想成为的用户或运行一个命令作为另一种用途,例如,在你的情况下,那就是:
sudo -i -u postgres
总结
创建 VM 时,在 "Enter the entire key data" 框中指定 ssh 用户。
详情
- 生成 ssh 密钥对并识别 public 密钥:
- if ssh-keygen,以“.pub”结尾的文件
- 如果是 PuTTYgen,框中的文本 "Public key for pasting ..."
注意字段,全部一行,由空格分隔:"protocol key-blob username"。
对于用户名,您可能会找到 Windows 用户名或类似 "rsa-key-20191106" 的字符串。您将用您选择的 Linux 用户名替换该字符串。
将 public 密钥信息粘贴到 "Enter the entire key data" 框中。
将第三个字段更改为您要在 VM 上创建的实际用户。例如,如果 "gcpuser",则:
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAjUIG3Z8wKWf+TZQ7nVQzB4s8U5rKGVE8NAt/LxlUzEjJrhPI5m+8llLWYY2PH4atZzuIYvYR0CVWhZvZQzLQc33vDOjQohxV9Lg26MwSqK+bj6tsr9ZkMs2zqNbS4b2blGnr37+dnwz+FF7Es9gReqyPxL9bn5PU/+mK0zWMHoZSEfUkXBrgqKoMQTsYzbMERluByEpZm9nRJ6ypvr9gufft9MsWC2LPhEx0O9YDahgrCsL/yiQVL+3x00DO9sBOXxi8kI81Mv2Rl4JSyswh1mzGAsT1s4q6fxtlUl5Ooz6La693IjUZO/AjN8sZPh03H9WiyewowkhMfS0H06rtGQ== gcpuser
创建您的 VM。 (例如 Debian)
连接到虚拟机
- 直接从 ssh 或 PuTTY(不是浏览器 window)
- 使用私钥
- 指定用户
请注意您的 public 密钥存在:
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
结论
在 "Enter the entire key data" 中指定用户名会产生以下结果:
- 正在虚拟机中创建用户。
- 正在将密钥上传到 ~/.ssh
- 无密码 sudo 组的成员
我正在尝试对 PostgreSQL 使用命令 sudo -i -u postgres
,但 Google Compute Engine VM 要求我提供我的帐户(不是 root)的密码。
由于我从未设置过密码,而且我总是通过 SSH 密钥登录到我的服务器,所以我不确定密码是什么、如何重设密码或在哪里可以找到它。
请告诉我在哪里可以得到我的密码?
根据 https://cloud.google.com/compute/docs/instances ,
The instance creator and any users that were added using the metadata sshKeys value are automatically administrators to the account, with the ability to run sudo without requiring a password.
所以您不需要那个不存在的密码——您需要 "added using the metadata sshKeys value"!这样做的规范方式,我引用了同一页:
$ 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。
要成为 GCE VM 上的另一个非根用户,首先通过无密码 sudo
成为 root
(因为这就是 sudo
在 GCE VM 映像上的配置方式):
sudo su -
然后切换到你想成为的用户或运行一个命令作为另一种用途,例如,在你的情况下,那就是:
sudo -i -u postgres
总结
创建 VM 时,在 "Enter the entire key data" 框中指定 ssh 用户。
详情
- 生成 ssh 密钥对并识别 public 密钥:
- if ssh-keygen,以“.pub”结尾的文件
- 如果是 PuTTYgen,框中的文本 "Public key for pasting ..."
注意字段,全部一行,由空格分隔:"protocol key-blob username"。 对于用户名,您可能会找到 Windows 用户名或类似 "rsa-key-20191106" 的字符串。您将用您选择的 Linux 用户名替换该字符串。
将 public 密钥信息粘贴到 "Enter the entire key data" 框中。
将第三个字段更改为您要在 VM 上创建的实际用户。例如,如果 "gcpuser",则:
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAjUIG3Z8wKWf+TZQ7nVQzB4s8U5rKGVE8NAt/LxlUzEjJrhPI5m+8llLWYY2PH4atZzuIYvYR0CVWhZvZQzLQc33vDOjQohxV9Lg26MwSqK+bj6tsr9ZkMs2zqNbS4b2blGnr37+dnwz+FF7Es9gReqyPxL9bn5PU/+mK0zWMHoZSEfUkXBrgqKoMQTsYzbMERluByEpZm9nRJ6ypvr9gufft9MsWC2LPhEx0O9YDahgrCsL/yiQVL+3x00DO9sBOXxi8kI81Mv2Rl4JSyswh1mzGAsT1s4q6fxtlUl5Ooz6La693IjUZO/AjN8sZPh03H9WiyewowkhMfS0H06rtGQ== gcpuser
创建您的 VM。 (例如 Debian)
连接到虚拟机
- 直接从 ssh 或 PuTTY(不是浏览器 window)
- 使用私钥
- 指定用户
请注意您的 public 密钥存在:
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
结论
在 "Enter the entire key data" 中指定用户名会产生以下结果:
- 正在虚拟机中创建用户。
- 正在将密钥上传到 ~/.ssh
- 无密码 sudo 组的成员