当我使用ssh登录google云实例时遇到以下问题
$ 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帐户完全相同,否则将出现“权限被拒绝(公钥)”问题。只有google cloud有此限制。
这不是“问题”。但是提示ssh到Google云失败。
答案 0 :(得分:2)
当我第一次尝试在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]
OR
ssh-rsa [KEY_VALUE] google-ssh {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}
在我的情况下是:
ssh-rsa AAAAB3MzaC1yc2EAAAADAQABAAABAQDdLjLb2b97m9NSK5Z8+j6U8awAwIx1Sbn9o4cEpYT2USYlFhJPRckgnmCQ+Eaim/sgL40V2v3Jwt6HVAY0L9bl84jmvox9QP4FOY7+LM02ZqfRB6LaEukM1tGdObVr+HBvhOwrxGCI06GFjnD3vVzW4jEsK75Y7MPzXd5YSpebGvU+7ZOuEcuSKp/R9dJcJn4kdXeaqor4gh8uTKQ43PGPTEvyoNlCWLkwSgy8khbo2BpoChLA7B53pVEhviMvVVIbmwpc6V2AIhRYY7ppR8oBzklLgh8CtTBPXtQRYiahLOIhds6ORf7wGNFI+A4sbBqwEL3J6av5fE1+zkUBhAHX promisepreston
复制其内容并将其粘贴到实例的SSH部分中的Metadata部分下 Adding or removing instance-level public SSH keys
在本地终端中,导航到具有私有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
命令与实例断开连接。
注意:
仅此而已。
我希望这会有所帮助
答案 1 :(得分:0)
使用SSH密钥连接到Google Cloud Compute Engine实例不仅限于该实例所属项目的用户。您可以生成SSH密钥,只要将其添加到实例中并且该用户存在于操作系统中,就应该可以进行SSH。您可以连接其他用户名。确保:
您通过Google Cloud Console [1]
您的用户名存在于您实例的操作系统上
如果要以“ root”身份使用SSH,请在/ etc / ssh / sshd_config文件中更改配置。
答案 2 :(得分:0)
答案 3 :(得分:0)
promise-preston的答案对我有用。问题是名称与Google帐户名不匹配。
请注意,如果未指定,则google ssh服务器识别的名称是根据您的电子邮件地址自动生成的,但不一定相同。在我的情况下,我的电子邮件地址是wenzhan.main@gmail.com,而用户名实际上是wenzhan_main。仔细检查那个技巧。
我想补充的一点小事情是,类似ssh -i kubernetes-trial promisepreston@52.174.274.72
的东西只有在您已经在.ssh/
目录中时才能起作用。
答案 4 :(得分:0)
您必须确保用于生成密钥的用户名与您本地 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
获取实例的外部 IPEXTERNAL_IP={{input your external ip}}
ssh-i ~/.ssh/my_google_cloud_key $USER@$EXTERNAL_IP
答案 5 :(得分:0)
Promise Preston 的解决方案有效,只需确保禁用“ENABLE-OSLOGIN”或从元数据设置中删除它即可。