AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 854208
Accepted
Gregor Menih
Gregor Menih
Asked: 2017-06-07 04:06:45 +0800 CST2017-06-07 04:06:45 +0800 CST 2017-06-07 04:06:45 +0800 CST

SSH突然返回无效格式

  • 772

所以不久前我在 AWS 上设置了一个服务器,并使用了他们生成的 SSH 密钥。我将密钥保存到 Lastpass,并且之前已经成功地从那里检索到它,并让它工作。但是,在今天再次尝试之后,我无法让它工作。

-rw------- 1 itsgreg users 1674 Jun 6 12:51 key_name

我试过ssh -i key_name, ssh-keygen -f key_name,但没有任何效果,我总是收到以下错误消息:

Load key "key_name": invalid format

有没有什么办法解决这一问题?

ssh
  • 30 30 个回答
  • 405894 Views

30 个回答

  • Voted
  1. kim0
    2020-07-17T02:03:32+08:002020-07-17T02:03:32+08:00

    从 openssh 7.6 开始,它默认为一种新的更安全的格式。您可以使用以下命令强制将其转换为该格式以更改您的密钥密码。如果您没有和/或不想要密码,您只需按 Enter 键,它仍会以新格式重写密钥

    ssh-keygen -f ~/.ssh/id_rsa -p
    
    • 73
  2. AKX
    2019-03-30T07:23:04+08:002019-03-30T07:23:04+08:00

    我遇到了同样的问题,事实证明由于某种原因我在文件中有 Windows 样式(CRLF)的行分隔符。

    此外,文件必须以单个 LF 结尾。

    修复那些让事情再次变得花花公子。

    • 55
  3. Best Answer
    13dimitar
    2017-06-07T04:23:27+08:002017-06-07T04:23:27+08:00

    检查 的内容key_name,如果代理说invalid format,那么密钥有问题 - 比如 .. 你确定那是正确的密钥吗?即使它不是您需要的私钥,invalid format如果密钥有效,ssh 代理也不会返回,您根本无法连接。出于某种原因,您可能已将您的公钥放在那里。核实!

    • 47
  4. Ras
    2018-07-21T19:44:43+08:002018-07-21T19:44:43+08:00

    我通过使用 PuTTY 密钥生成器将私钥转换为OpenSSH 格式在 Windows 中解决了这个问题。

    1. 开始菜单 | 所有应用程序 | 腻子 |PuTTYgen
    2. 加载my.ppk
    3. Conversions|Export OpenSSH key
    4. 节省my_openssh.ppk

    开始菜单、所有应用程序、PuTTY 部分、PuTTYgen

    PuTTYgen、转换、导出 OpenSSH

    现在这有效:

    ssh -i "my_openssh.ppk" [email protected]
    

    Mac 转换:(感谢@ChrisGillatt)

    brew install putty 
    puttygen ~/.ssh/my.ppk -O private-openssh -o ~/.ssh/my_openssh.ppk
    
    • 31
  5. starfry
    2020-07-29T04:31:44+08:002020-07-29T04:31:44+08:00

    如果您收到有关无效公钥格式的警告但该命令仍然有效,则可能是因为您只有一个私钥文件并且使用的是 OpenSSH 8.3。

    OpenSSH 8.3 包含对 ssh 客户端的更改,它在其中查找私钥的相应公钥文件并输出此load pubkey "/home/user/.ssh/id.rsa": invalid format警告,但继续成功连接。使用 ssh 的工具,例如scp或git可能显示key_load_public: invalid format.

    客户端连接时不需要公钥,只需要私钥。所以这个检查是没有意义的,它已经被上游提交删除了,但还没有发布。

    ArchLinux 论坛上对此进行了讨论。

    • 25
  6. user50849
    2019-09-14T05:59:02+08:002019-09-14T05:59:02+08:00

    就我而言,事实证明我在开始/结束“标题”和关键数据之间有换行符:

    -----BEGIN RSA PRIVATE KEY-----
    
    - Key data here -
    
    -----END RSA PRIVATE KEY-----
    

    删除额外的新行,所以它变成了

    -----BEGIN RSA PRIVATE KEY-----
    - Key data here -
    -----END RSA PRIVATE KEY-----
    

    解决了我的问题。

    • 18
  7. Robert J
    2019-08-05T08:38:21+08:002019-08-05T08:38:21+08:00

    我今天刚刚在为我的 CI 管道编写一些 git 标记工具时遇到了这个问题。

    这是我的两个键之间的区别:

    $ diff ~/.ssh/gitlab ~/.ssh/git_ssh_key
    27c27
    < -----END OPENSSH PRIVATE KEY-----
    ---
    > -----END OPENSSH PRIVATE KEY-----
    \ No newline at end of file
    

    我像这样更改了我的代码:

         with open(ssh_key_file, 'w') as skf:
    -        skf.write(ssh_key)
    +        skf.write(ssh_key + '\n')
    

    现在我的 ssh 密钥可以工作了。

    TL;DR - 我猜你必须在你的私钥末尾有一个换行符。

    • 13
  8. Vicente Quintans
    2020-06-03T01:08:24+08:002020-06-03T01:08:24+08:00

    在 Fedora 32 最近更新后,我在连接到远程主机时开始收到此警告。

    我解决了将pkcs11:添加到.ssh/config中的IdentityFile参数的问题,如下所示:

    IdentityFile pkcs11:~/.ssh/my_key.pem 
    

    作为参考,摘自 ssh_config 手册页:

    身份验证身份也可以以 PKCS#11 URI 的形式指定,以字符串 pkcs11: 开头。

    • 10
  9. vpathak
    2018-04-18T04:41:18+08:002018-04-18T04:41:18+08:00

    我要求 openssh 通过在 .ssh/config 文件中指定特定身份文件来使用它。

    原来的工作配置有

    IdentityFile = <path to public key file> 
    

    这停止工作而没有任何更改。经过一番思考,我将上面的“公钥文件的路径”替换为“私钥文件的路径”。那行得通。原因是,根据 RSA 算法,公钥和私钥文件都具有大量与伪素数相关的数字。如果您将私钥文件替换为公钥文件,这些加密数字将无法从保存在密钥文件中的 base64 块中正确提取。似乎某些版本的 ssh 可以找出 .pub 扩展名并使用它来识别正确的私钥文件 - 而其他版本则不这样做。这是此错误发生的另一种方式。希望它可以帮助某人。

    • 8
  10. Joshua Davies
    2021-01-08T10:23:22+08:002021-01-08T10:23:22+08:00

    就我而言,发生这种情况是因为我在 DEK-Info 和实际关键数据之间缺少一个空白行。我有:

    -----BEGIN RSA PRIVATE KEY-----
    Proc-Type: 4,ENCRYPTED
    DEK-Info: AES-128-CBC,6E6F6E65206F6620796F757220627573
    VGhpcyBpcyBub3QgbXkgYWN0dWFsIGtleSBzb3JyeSB0byBkaXNhcHBvaW50IHlv
    ...
    

    但它必须是:

    -----BEGIN RSA PRIVATE KEY-----
    Proc-Type: 4,ENCRYPTED
    DEK-Info: AES-128-CBC,6E6F6E65206F6620796F757220627573
    
    VGhpcyBpcyBub3QgbXkgYWN0dWFsIGtleSBzb3JyeSB0byBkaXNhcHBvaW50IHlv
    ...
    
    • 6

相关问题

  • 如何最好地设置 ssh 隧道以访问远程网络 (Linux)

  • SSH 和重定向

  • 通过 SSH 会话使用 NET USER 命令拒绝访问

  • SSH 服务器零日漏洞利用 - 保护自己的建议

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve