问题
在mac上面使用私钥文件登录时候,出现了如下错误:
Load key “xxx.pem”: invalid format
但是,这个私钥文件在win上面能够正常使用ssh进行远程登录。在mac上面不能。而且,分别在win和mac上面分别查看了这两个私钥文件的md5值,都是一样的。但是,在mac上面就会报无效格式错误。
原因
在换行百科查看如下内容:
MS-DOS(1981年)为了兼容采用了遵循DEC小型机标准的CP/M的CR+LF,而这个约定也被微软后来的Windows操作系统继承了。
1964年开始开发的Multics操作系统使用单独的LF作为换行符。Multics使用设备驱动程序将LF字符转换为打印机所需的任何字符序列(包括额外的填充字符),且单字节更便于编程。CR字符提供了将一行与另一行叠印以创建粗体、下划线和删除线效果的有用功能。单独使用LF作为行终止符已经被纳入最终的ISO/IEC 646标准草案中。Unix遵循了Multics的做法,后来类Unix系统也遵循了Unix。 这在Windows和类Unix操作系统之间造成了冲突,在一个操作系统上编写的文件无法正确格式化或由另一个操作系统解释。
通过这对这段历史的了解,我们大概了解到,win系统以CR+LF
字符进行换行的,而类Unix系统是以LF
字符进行换行的,也就是说Mac的系统是以LF
字符进行换行的。
解决
接下来我们通过VS Code来检查我们的pem私钥文件查看换行字符模式,右下角换行模式,如下图:
可以知道这个私钥文件使用的是CRLF换行。如果用这个文件在mac上面使用ssh私钥文件远程登录,这会出现问题:
invalid format
这里只需要修改CRLF换行格式为LF
字符换行即可。然后,再次尝试登录即可。
测试
总结
对mac和win的换行区别又加深了。
参考
- 换行
- github使用ssh密钥访问出现error in libcrypto等问题