今天在一个机器上SSH时遇到报错Load key "/root/.ssh/id_rsa": error in libcrypto
。查了半天,各种方法都试过了,包括检查和更新openssh、libcrypto版本等,都不解决问题。
一次偶然测试发现,如果我是cat写入的~/.ssh/id_rsa
私钥文件,就没这个问题。于是我通过cat -v
打出来含隐藏字符的原先的私钥文件,发现里面的换行符使用的是Windows的CRLF
(\r\n
)。SSH不识别,所以报错。
出现这个问题的具体原因是,我的密钥文件是通过网页提交到DB中的,然后读DB把密钥写了出来。如果我是在Windows系统中通过网页提交,会自动把换行符以CRLF
的形式写入DB中,而且是看不出来换行符是什么的。这个问题非常隐蔽,确实很难发现。
Comments