![](/img/trans.png)
[英]SSH on console google cloud permission denied (publickey) with google-cloud-sdk file error
[英]Google Cloud Platform: SSH to Google cloud instance will have "Permission denied (publickey)"
当我使用 ssh 登录谷歌云实例时,我遇到了如下问题
$ ssh -i DD2 root@35.237.32.84
Permission denied (publickey).
经过一番测试,发现错误的原因是公钥签名与google cloud的账号不一致:
例如:
scuio33@chef-server:~$
这里你的帐户是 scuio33 然后你的发布文件将是:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBpNeFZyXXXehjPuGCkEjb/t
laNQt0fztORSCFFQIoKHkQzi7SNhp48kagyOHDNj6mY1LmVZB/sIj2oCa1AFupoFuBYc/XILP
rTX60fIlnBYkHl+6Kq/TX2hzKv scuio33
scuio33 将与您的 google 帐户完全相同,否则将出现“权限被拒绝(公钥)”的问题。 只有谷歌云有这个限制。
这不是一个“问题”。 但是提示 ssh 到谷歌云失败。
我第一次尝试在 Google Cloud Platform 上设置 Kubernetes 时遇到了这个问题。
每次尝试从终端通过 SSH 连接到我的实例时,我都会遇到以下错误:
promisepreston@52.174.274.72: Permission denied (publickey)
这是我解决它的方法:
在您的工作站上打开一个终端并使用ssh-keygen
命令生成一个新密钥。 指定-C
标志以使用您的用户名添加注释。
ssh-keygen -t rsa -f ~/.ssh/[KEY_FILENAME] -C [USERNAME]
就我而言,它是:
ssh-keygen -t rsa -f ~/.ssh/kubernetes-trial -C promisepreston
导航到.ssh
目录:
cd ~/.ssh
限制对您的私钥的访问,以便只有您可以读取它,而没有人可以写入它。
chmod 400 [KEY_FILENAME]
就我而言,它是:
chmod 400 kubernetes-trial
双击kubernetes-trial.pub
将其打开或使用cat
命令在控制台上打印它:
sudo cat kubernetes-trial.pub
公共 SHH 密钥应采用以下格式:
ssh-rsa [KEY_VALUE] [USERNAME]
或者
ssh-rsa [KEY_VALUE] google-ssh {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}
就我而言,它是:
ssh-rsa AAAAB3MzaC1yc2EAAAADAQABAAABAQDdLjLb2b97m9NSK5Z8+j6U8awAwIx1Sbn9o4cEpYT2USYlFhJPRckgnmCQ+Eaim/sgL40V2v3Jwt6HVAY0L9bl84jmvox9QP4FOY7+LM02ZqfRB6LaEukM1tGdObVr+HBvhOwrxGCI06GFjnD3vVzW4jEsK75Y7MPzXd5YSpebGvU+7ZOuEcuSKp/R9dJcJn4kdXeaqor4gh8uTKQ43PGPTEvyoNlCWLkwSgy8khbo2BpoChLA7B53pVEhviMvVVIbmwpc6V2AIhRYY7ppR8oBzklLgh8CtTBPXtQRYiahLOIhds6ORf7wGNFI+A4sbBqwEL3J6av5fE1+zkUBhAHX promisepreston
复制其内容并粘贴到 Metadata 部分下的实例的 SSH 部分添加或删除实例级公共 SSH 密钥
在本地终端中,导航到您拥有SSH 私有密钥文件的目录,使用ssh
命令以及您的私有 SSH 密钥文件、用户名和实例的外部 IP 地址进行连接。 例如:
ssh -i private-key username@external-ip-of-the-virtual-instance
就我而言,它是:
ssh -i kubernetes-trial promisepreston@52.174.274.72
连接后,使用此终端在您的实例上运行命令。 完成后,通过运行exit
命令断开与实例的连接。
注意:
就这样。
我希望这有帮助
使用 SSH 密钥连接到 Google Cloud Compute Engine 实例不仅限于该实例所属项目的用户。 您可以生成 SSH 密钥,只要将其添加到实例并且用户存在于操作系统上,您就应该能够 SSH。 您可以连接其他用户名。 确保:
您通过 Google Cloud Console [1]将公钥添加到实例
您的用户名存在于您实例的操作系统上
如果您想以“root”身份使用 SSH,请更改 /etc/ssh/sshd_config 文件中的配置。
承诺普雷斯顿的回答对我有用。 问题是名称与谷歌帐户名称不匹配。
考虑到,如果未指定,google ssh 服务器识别的名称是根据您的电子邮件地址自动生成的,但不一定相同。 就我而言,我的电子邮件地址是wenzhan.main@gmail.com,用户名实际上是wenzhan_main。 仔细检查那个把戏。
我想补充的另一件小事是,像ssh -i kubernetes-trial promisepreston@52.174.274.72
这样的东西,只有在您已经在.ssh/
目录中时才有效。
您必须确保用于生成密钥的用户名与本地 cpu 的用户名匹配。
在本地 cpu 上:默认情况下,linux $USER 会给你你的用户名( echo $USER
),所以你甚至不需要指定它。
ssh-keygen -t rsa -f ~/.ssh/my_google_cloud_key -C $USER
cat /home/$USER/.ssh/my_google_cloud_key.pub
选择并复制到https://console.cloud.google.com/compute/metadata/sshKeys (添加密钥,然后保存)
在https://console.cloud.google.com/compute/instances获取您的实例的外部 IP
EXTERNAL_IP={{input your external ip}}
ssh-i ~/.ssh/my_google_cloud_key $USER@$EXTERNAL_IP
Promise Preston 的解决方案有效,只需确保禁用“ENABLE-OSLOGIN”或从元数据设置中删除它。
转到项目级元数据(Compute Engine -> Metadata)并确保您没有 enable-oslogin 密钥或将其设置为 FALSE。这适用于 windows powershell
值得一提的是,我必须在“edit [name] instance”-> Security and access --> SSH Keys 中添加 SSH 密钥,我添加了 .pub 密钥,如上所述。
有同样的错误。 尝试添加--tunnel-through-iap
gcloud compute ssh --zone "%zone%" "%instanaceName%" --project "%projectName%" --tunnel-through-iap
替换以下内容:
我知道有类似的答案,但我很容易迷失在答案中;
对于现有的 ssh 密钥
1- 按照以下格式复制您的公钥,即: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... hbceylan
2- GCP >编辑 VM >添加 SSH 密钥>保存
3- SSH 到实例ssh -i /path-to-private-key/id_rsa hbceylan@1.2.3.4
获取新的 ssh-key
1- 创建一个 ssh 密钥,即:
ssh-keygen -t rsa -f ~/.ssh/x-poject-hbceylan -C hbceylan -b 2048
2- GCP > Edit VM > add SSH key > SAVE(见图片)
3- SSH 到实例
ssh -i /path-to-private-key/id_rsa hbceylan@1.2.3.4
就我而言,尽管将公钥上传到 VM 并使用私钥在 Visual Studio 中配置 ssh 文件,但出于同样的原因,我无法连接。
对我来说,这就是解决的问题。 您按照将 .pub 文件添加到实例元数据的步骤操作,将您的私钥保存在 ssh 配置文件中,然后运行:
gcloud compute ssh --zone "your-vm-zone" "your-instance" --project "your_project"
这将生成谷歌云虚拟机识别的 id_rsa 文件。 然后,您可以在 Visual Studio Code 中使用 SSH 定期连接。
我试图以用户jupyter
的身份执行此操作。 在@maximusX3 的回答提示下,建议对 Metadata 进行更改,我拉出了我 的 GCP 元数据的 SSH keys 子页面。
有趣的是,当我加载页面时, jupyter
用户有重复的 SSH 键,界面自动提示我删除重复的 SSH 键。 (您可以通过 GCP 界面一键执行此操作。)这样做之后,我可以使用常用的gcloud compute ssh jupyter@machine
命令将 ssh 作为 jupyter,而无需任何其他本地或远程更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.