赠人玫瑰,手留余香。
本文讲述Windows Terminal使用密钥对(pem)进行SSH连接时报WARNING: UNPROTECTED PRIVATE KEY FILE错误的解决方法。
Windows Terminal简要介绍
Windows Terminal 是开源高效的终端应用程序,除了WSL,命令行和powershell我还用它作为SSH终端
在作为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
查看密钥对文件的拥有者
方法:右键点击这个密钥对文件,选择【属性】–> 【安全】–> 【高级】
打开之后的界面如下
但是我注意到这个Owner会随着你是否在公司域内变化,查看Owner是否是当前用户名
注意:当我的pc在公司网域内时Owner是Office365邮箱
注意:当我的pc不在公司网域内时Owner会变为本机的域名
如果不是当前用户则取消继承并删除Permission Entries中所有记录,然后修改所有者并重建用户赋予权限
点击Disable Inheritance来取消继承,之后才能移除权限授予,记住我们是需要移除所有记录。
移除之后是修改所有者
右键点击这个密钥对文件,选择【属性】–> 【安全】–>【编辑】
点击添加
输入域用户名后点击检查名称
如果不在域中,会不成功,出现这个结果
但是如果在域中会成功
添加权限,和上面几步类似,找到当前用户名后添加权限就可以。
如果所有者是当前用户则取消继承并删除Permission Entries中除所有者外其他记录
在弹出的对话框中选择Convert开头的这个选项,然后就可以删除记录
删除之后只剩和owner一致的
原因分析
由于pem文件的所有者和当前用户不一致,或者文件授予的权限太高导致,默认的权限太多,需要仅仅保留授权所有者。
如果不小心把所有授权的记录都删掉,可以通过添加重新添加回来,但是需要注意不在公司域内时有可能找不到Owner这个用户
当电脑不在公司内网时,显示的这个pem密钥对文件的所有者为域名\用户名,但是在域的时候显示的是另一个。比如我没有进公司域的时候是one\xxxxx,进入域之后xxxx@grassvalley.com。