我在PuTTY上生成了两个密钥:公钥和私钥。在Windows上使用此软件,我可以像往常一样连接到服务器。
然后我尝试将这些文件复制到我的 ubuntu 机器(21.04)中,并登录加载私钥(打开 putty,写入user@hostname
然后在 SSH>Auth 中加载私钥),但无法连接被服务器拒绝,因为此错误说:
Unable to load key file '~/private_key.ppk' (PuTTY key format too new).
然后会出现一个窗口,上面写着:
No supported authentication methods available (server sent: publickey)
因此,正如第一个错误所暗示的,通过 PuTTYgen 将私钥转换为 openssh PEM 格式,然后将该文件加载到 SSH/Auth 后,之前仍然显示“不支持”消息:
Unable to use key file '~/private_key_openssh' (OpenSSH SSH-2 private key (old PEM format) ).
有什么办法可以在 Ubuntu 上使用这些密钥吗?也许通过 openssh?
一些有用的信息:
- 新安装的 Ubuntu 版本
- 腻子0.74
尝试时的输出ssh -i ~/.ssh/private_key.ppk user@hostname
加载密钥“~/.ssh/private_key.ppk”:格式无效的用户@主机名:权限被拒绝(公钥)。
答案1
Adonis 和 Thomas 的回答/评论基本正确,但缺少一些我需要在实践中实现的细节。由于我的声誉不足以发表评论,我将通过此答案添加详细信息。
将 Putty PPK 导出为 OpenSSH 格式。
为此,请打开 PuttyGen,加载私钥,然后转到“转换”菜单并选择“导出 OpenSSH 密钥”
在 Ubuntu(或衍生版本)上使用 OpenSSH 密钥
如果您直接将其用于 SSH,则可以按照 Adonis 所述使用它。但是如果您间接需要它,例如用于源代码控制系统,该怎么办?
将其复制到 Linux 上的 ~/.ssh 文件夹中。如果您以前没有在 Linux 机器上使用过 SSH,则可能需要创建此文件夹。创建 .ssh 目录时,您需要这样做,chmod 0700 ~/.ssh
以便 ssh 工具相信该目录确实是您的私有目录。
如果您从 Windows 复制了密钥文件,现在打开终端到 ~/.ssh 文件夹,然后运行chmod 400 [private key file name]
。这是必要的,因为默认权限(从 Windows 复制时)将为 770;SSH 实用程序会告诉您这太宽松了,它会忽略密钥。不幸的是,它没有直接告诉您如何修复问题,但 400 权限(表示“我可读,其他人不可用”)将纠正问题。
现在,在终端上运行eval $(ssh-agent)
。这将打开您的本地 SSH 代理,并允许您添加可被其他程序(例如源代码控制)获取的密钥。
最后,运行ssh-add ~/.ssh/[private file key name]
。只要你记得设置权限,它就可以工作,并且你应该能够使用 git/hg/etc。使用你的 SSH 密钥。
答案2
连接成功!
authorized-keys
根据 Thomas Ward 的建议,第一步是将 private_key 文件加载到 Windows 上的 PuTTYgen 中,并将公钥复制到该文件中。
此外,将 private_key 文件导出为 openssh 格式(第一个选项)为 private_OpenSSH 文件,然后将其移动到 ~/.ssh 目录以使用以下命令更改权限:
chmod 400 private_OpenSSH
让我最终联系到:
ssh -i ~/private_OpenSSH user@hostname