1. Windows 下 ssh 的使用
之前很长一段时间都使用 xshell 这样的第三方工具来登录 Linux 服务器的,现在 Windows 已经自带 Terminal 和 ssh,一个命令就可以很方便的搞定:
$ ssh root@192.168.1.116上面是通过用户名密码的方式登录的,那么使用私钥又该怎么操作呢?请往下看。
2. 使用私钥和密码登录遇到的问题
最近一个项目配置了使用 rsa private key 进行 ssh 远程服务器的登录,在 Windows 上直接使用 Terminal 登录,遇到了如下错误:
PS D:\> ssh -i D:\lab\myrsa.key developer@192.168.0.118
The authenticity of host '192.168.0.118 (192.168.0.118)' can't be established.
ED25519 key fingerprint is SHA256:QnXN8JllKhr8TY2TQzPOyBpRIqhSC5zGb5u64bbiNtw.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.0.118' (ED25519) to the list of known hosts.
Bad permissions. Try removing permissions for user: NT AUTHORITY\\Authenticated Users (S-1-5-11) on file D:/lab/myrsa.key.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'D:\\lab\\myrsa.key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "D:\\lab\\myrsa.key": bad permissions
developer@192.168.0.118: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).如上提示所示,问题出在 D:\lab\myrsa.key 文件的权限太开放了,需要修改文件权限。
3. 问题的解决
这个问题,只要修改文件权限,限制它只能被当前用户“完全控制”,而不是能被一大堆账号访问就可以了。
3.1 当前私钥文件权限情况如下
修改前的私钥文件权限
3.2. 首先重置从父文件夹继承的权限
PS D:\> icacls "D:\lab\myrsa.key" /inheritance:r
已处理的文件: D:\lab\myrsa.key
已成功处理 1 个文件; 处理 0 个文件时失败重置后的权限情况如下图:
重置继承权限后的情况
3.3. 设置当前用户完全控制权限
PS D:\> icacls "D:\lab\myrsa.key" /c /t /grant:r %username%:F
已处理的文件: D:\lab\myrsa.key
已成功处理 1 个文件; 处理 0 个文件时失败设置后权限情况如下:
设置只有当前用户有权限
3.4. 重新登录 - 成功
设置之后,只有当前用户有该文件的权限,不再“open”了,再次登录,就成功了:
PS D:\> ssh -i D:\lab\myrsa.key developer@192.168.0.118
Enter passphrase for key 'D:\lab\myrsa.key':
Last login: Tue Dec 17 13:41:24 2024 from 192.168.1.168
[developer@CentOS8 ~]$ 总结一下,Windows 下可以直接通过自带的 Terminal 使用 ssh 命令登录 Linux 服务器,再也不需要安装第三方工具了。在使用私钥登录时,私钥文件的权限不能太过“Open”,为此要对私钥文件的权限进行修改:
icacls "D:\lab\myrsa.key" /inheritance:r
icacls "D:\lab\myrsa.key" /c /t /grant:r %username%:F
ssh -i D:\lab\myrsa.key developer@192.168.0.118Enjoy