Flo*_*wig 26 linux ssh ssh-agent
出于某种原因,我的一个 ssh 密钥“刚刚坏了”——它刚刚停止工作:
$ ssh-add ./id_rsa
Error loading key "./id_rsa": invalid format
Run Code Online (Sandbox Code Playgroud)
将密钥复制到干净的 VM 中,密钥确实有效。即使使用完全相同的 ssh 版本(Fedora 28 上的 OpenSSH_7.8p1、OpenSSL 1.1.0i-fips 2018 年 8 月 14 日)。所以它必须与我假设的系统上的一些配置有关。
# cat ./id_rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,...
...
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
同样奇特的是:GNOME 以某种方式设法在使用 seahorse 登录时添加密钥。然后ssh-add -L确实列出了密钥但它不可用:
sign_and_send_pubkey: signing failed: agent refused operation
Run Code Online (Sandbox Code Playgroud)
use*_*686 23
传统上,OpenSSH 使用的私钥格式与 OpenSSL 使用的旧 PEM 格式相同。(因为它使用 OpenSSL 来解析密钥,所以它也将接受较新的 PKCS#8 格式。)
所以问题可能是以下之一:
您的 OpenSSL 版本拒绝加载此密钥格式。也许它意外启用了 FIPS 模式并拒绝了除原始 FIPS 验证部分之外的任何算法?
尝试将密钥加载到openssl命令行工具中(是的,它也可能链接到不同的libcrypto,您应该检查ldd):
openssl rsa -noout -text < id_rsa
openssl pkey -noout -text < id_rsa
Run Code Online (Sandbox Code Playgroud)
尝试将其转换为 PKCS#8 格式:
umask 077
openssl pkey < id_rsa > id_rsa.pkcs8
ssh-add id_rsa.pkcs8
Run Code Online (Sandbox Code Playgroud)您的 OpenSSH 是在没有 OpenSSL 支持的情况下构建的。虽然ssh -V说支持启用,这并不意味着该ssh-add二进制是相同的-它可能来自不同的部分安装。
使用type -a ssh和type -a ssh-add来比较安装位置。
知道路径后,请使用ldd /usr/bin/ssh-add来验证它是否链接到libcrypto.so(OpenSSL 加密库)。
如果没有任何效果,请尝试使用... PuTTY 将您的密钥转换为新的 OpenSSH 专有格式。安装puttyFedora的软件包,并使用:
puttygen id_rsa -o id_rsa.newformat -O private-openssh-new
ssh-add id_rsa.newformat
Run Code Online (Sandbox Code Playgroud)
同样奇特的是:GNOME 以某种方式设法在使用 seahorse 登录时添加密钥。
较旧的 GNOME 密钥环版本具有 SSH 代理代码的内部副本,并且独立于系统 OpenSSH。所以他们会接受你的 OpenSSH 不会接受的密钥。(但另一方面,这意味着在功能支持(例如 Ed25519 密钥)方面严重滞后,而最新的 GNOME Keyring 只是使用系统 ssh-agent。)
就我而言,我只是复制了 id_rsa 私钥,但没有复制公共部分 id_rsa.pub。它有效,但每次我进行服务器操作时都会抱怨“格式无效”。复制 id_rsa.pub 也解决了问题。
| 归档时间: |
|
| 查看次数: |
131534 次 |
| 最近记录: |