![SSH 密钥在 Ubuntu Azure VPS 上停止工作](https://linux22.com/image/649818/SSH%20%E5%AF%86%E9%92%A5%E5%9C%A8%20Ubuntu%20Azure%20VPS%20%E4%B8%8A%E5%81%9C%E6%AD%A2%E5%B7%A5%E4%BD%9C.png)
我有一个在 Azure 上运行的 Ubuntu 实例。过去 6 个月左右我一直在使用它来提升我的新手 Linux 管理技能。昨天,我正在配置 Capistrano 部署到此服务器时,我的 ssh 密钥突然停止工作。过去,我Permission denied
在尝试 ssh 到该框时看到过这种情况,我只是重新添加我的私钥交给关键代理,它又起作用了。我从来没有真正确定为什么钥匙坏了,但我可以毫不费力地修好它,而且这种情况并不经常发生,所以我没怎么在意。但是昨天,我没能用这种方法解决这个问题,从那以后,我一直在绞尽脑汁想找出问题所在。
以下是我已采取的步骤和尝试过的方法:
- 这是我通常运行的操作(直到昨天为止已经运行了几个月):
ssh azure-southerneer
我的 ~/.ssh/config 中的相关条目:
Host azure-southerneer Hostname southerneer.cloudapp.net User azureuser IdentityFile ~/.ssh/azure-wp-eric.key IdentitiesOnly yes ServerAliveInterval 300 StrictHostKeyChecking no
- 输出:
Permission denied (publickey).
如果我使用 -v 标志运行它,我会得到以下结果:
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011 OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011 debug1: Reading configuration data /Users/kirkham/.ssh/config debug1: /Users/kirkham/.ssh/config line 27: Applying options for azure-southerneer debug1: Reading configuration data /etc/ssh_config debug1: /etc/ssh_config line 20: Applying options for * debug1: /etc/ssh_config line 102: Applying options for * debug1: Connecting to southerneer.cloudapp.net [191.237.4.63] port 22. debug1: Connection established. debug1: identity file /Users/kirkham/.ssh/azure-wp-eric.key type -1 debug1: identity file /Users/kirkham/.ssh/azure-wp-eric.key-cert type -1 debug1: Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_6.2 debug1: Remote protocol version 2.0, remote software version OpenSSH_6.6.1p1 Ubuntu-8 debug1: match: OpenSSH_6.6.1p1 Ubuntu-8 pat OpenSSH* debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: server->client aes128-ctr [email protected] none debug1: kex: client->server aes128-ctr [email protected] none debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP debug1: SSH2_MSG_KEX_DH_GEX_INIT sent debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY debug1: Server host key: RSA 77:6f:e6:84:ca:09:04:83:fd:37:96:3f:d3:2a:77:a6 debug1: Host 'southerneer.cloudapp.net' is known and matches the RSA host key. debug1: Found key in /Users/kirkham/.ssh/known_hosts:78 debug1: ssh_rsa_verify: signature correct debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug1: SSH2_MSG_NEWKEYS received debug1: Roaming not allowed by server debug1: SSH2_MSG_SERVICE_REQUEST sent debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: Authentications that can continue: publickey debug1: Next authentication method: publickey debug1: Trying private key: /Users/kirkham/.ssh/azure-wp-eric.key debug1: read PEM private key done: type RSA debug1: Authentications that can continue: publickey debug1: No more authentication methods to try. Permission denied (publickey).
怎么回事?!它尝试了正确的键,但它就是不喜欢它了?!
- 我知道服务器已启动并运行,因为我托管的网站仍然运行良好。从详细的 ssh 输出来看,它显然有响应,只是它不喜欢我的 azure-wp-eric.key(它没有改变)。
- 我并没有故意摆弄服务器上 azureuser 主目录或 .ssh 目录的权限,所以这应该不会搞乱任何东西。
- 我尝试过从 Azure 管理门户弹出服务器,但这并没有解决任何问题。
- 我昨天早上确实在服务器上运行过
sudo apt-get update
,但是在测试我的 capistrano 部署时我全天都能够正常使用 ssh,所以这似乎没有造成问题。
此时,我已经无计可施了。我显然不太擅长解决 ssh 问题,所以我正在慢慢地阅读文章,试图找到我遗漏的内容。我不知道有什么方法可以系统地找出我做错的地方,作为一名开发人员,这真的让我很困扰。我是不是忽略了什么?还有其他东西可以验证我走的路是对的还是错的?有没有其他人在 Ubuntu 或 Azure VM 上遇到过类似的问题?如果我可以提供任何进一步的详细信息来帮助诊断问题,请告诉我。请帮忙!
答案1
我意识到了自己的错误。感谢@kasperd 帮我解决了这个问题。我关注了Azure 的 SSH 创建说明一丝不苟。当我生成密钥时,我使用了这个命令
openssl req -x509 -key ~/.ssh/id_rsa -nodes -days 365 -newkey rsa:2048 -out myCert.pem
这会生成一个新密钥,该密钥将在 365 天后过期。碰巧的是,昨天就是第 365 天,这意味着我的密钥不再有效。由于这是 VM 的唯一密钥,我想我完蛋了?看起来是这样。呃。
更新: 根据 @kasperd 的评论,我的服务器在设置后整整一年内停止让我使用 SSH,这可能只是一个疯狂的巧合。感谢通过讨论主题进行对话在 Azure 文档网站上,我发现通过图库创建的 Azure Linux VM 已加载 Microsoft Azure Linux 代理,该代理允许管理员通过命令行重置 SSH(即 Powershell)。因此,虽然切换到 Windows 对我来说很麻烦,但我能够按照步骤重置虚拟机上的 SSH 选项。不幸的是,我仍然无法通过 SSH 进入我的机器。显然,我对我的机器做了一些重置选项无法覆盖的极端操作,但对于情况不那么严重的用户,希望他们可以按照这些链接中的一些内容来帮助解决他们的情况。