在首次在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
将其内容复制并粘贴到元数据部分下的实例SSH部分。
添加或删除实例级公共SSH密钥
![ssh keys](https://istack.dev59.com/MeD7e.webp)
在本地终端中,导航到您拥有
私有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 密钥,详情请查看
添加或删除仅限实例的公共 SSH 密钥。
- 确保您未阻止项目范围公共 SSH 密钥进入 Linux 实例,详情请查看
允许或阻止项目范围公共 SSH 密钥进入 Linux 实例。
- 确保未启用 OS 登录,详情请查看
启用或禁用 OS 登录。
就这些了。
希望能对您有所帮助。
scuio33
将与您的 Google 帐户完全相同,否则将出现“权限被拒绝(publickey)”的问题。这没有意义。公钥行中的“scuio33”字段是一个注释。它对 ssh 的工作没有任何影响。 - Kenster