Posted in: Windows Terminal

Windows Terminal使用密钥对SSH报UNPROTECTED PRIVATE KEY FILE错误的解决方法

赠人玫瑰,手留余香。

本文讲述Windows Terminal使用密钥对(pem)进行SSH连接时报WARNING: UNPROTECTED PRIVATE KEY FILE错误的解决方法。

Windows Terminal简要介绍

Windows Terminal 是开源高效的终端应用程序,除了WSL,命令行和powershell我还用它作为SSH终端
file

在作为SSH终端使用时,当云主机使用密钥对keypair来登录,则需要使用SSH的-i参数加上密钥对的路径来做指向。

ssh -i C:\yourkeypair.pem root@11.22.33.44

以上的示例说明密钥对在使用windows terminal终端的PC的路径为C盘根目录,密钥对的名字是yourkeypair.pem,服务器的IP地址是11.22.33.44,登录用户名是root

但是配置完之后使用的时候有可能你会遇到报错且无法完成SSH连接,报错WARNING: UNPROTECTED PRIVATE KEY FILE!

以下是我验证可以使用的解决方法

我的使用环境:

Windows 11 Pro
Windows Terminal V1.15.2875.0

解决方法

从错误提示来说,无法执行是因为系统对这个密钥对文件的保护不够,所以解决方法就是增加这个.pem文件的安全,确保这个文件的所有者是唯一获得控制权

思路

在pem文件的属性下修改相关安全属性

步骤

确认当前用户名

在powershell中使用以下命令来获得用户名

$env:username

file

查看密钥对文件的拥有者

方法:右键点击这个密钥对文件,选择【属性】–> 【安全】–> 【高级】
file
打开之后的界面如下
file
但是我注意到这个Owner会随着你是否在公司域内变化,查看Owner是否是当前用户名

file

注意:当我的pc在公司网域内时Owner是Office365邮箱

file

注意:当我的pc不在公司网域内时Owner会变为本机的域名

如果不是当前用户则取消继承并删除Permission Entries中所有记录,然后修改所有者并重建用户赋予权限

点击Disable Inheritance来取消继承,之后才能移除权限授予,记住我们是需要移除所有记录。

移除之后是修改所有者
file
右键点击这个密钥对文件,选择【属性】–> 【安全】–>【编辑】
file
点击添加
file
输入域用户名后点击检查名称
file
如果不在域中,会不成功,出现这个结果
file
但是如果在域中会成功
file
file
添加权限,和上面几步类似,找到当前用户名后添加权限就可以。

如果所有者是当前用户则取消继承并删除Permission Entries中除所有者外其他记录

file
在弹出的对话框中选择Convert开头的这个选项,然后就可以删除记录
file

删除之后只剩和owner一致的
file

原因分析

由于pem文件的所有者和当前用户不一致,或者文件授予的权限太高导致,默认的权限太多,需要仅仅保留授权所有者。

如果不小心把所有授权的记录都删掉,可以通过添加重新添加回来,但是需要注意不在公司域内时有可能找不到Owner这个用户

当电脑不在公司内网时,显示的这个pem密钥对文件的所有者为域名\用户名,但是在域的时候显示的是另一个。比如我没有进公司域的时候是one\xxxxx,进入域之后xxxx@grassvalley.com。

Back to Top