問題
在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等問題