前言
刚刚不知道在做什么,不小心把自己~/.ssh/
文件夹里面的私钥给改了,幸好这玩意儿我在网盘备份了一个(别问我为什么在网盘要被备份私钥这么危险的事情,你看这不就有用了嘛!下次一定不会了!)
但是发现了下载下来的私钥不能直接用,遂好奇,后发现原来是permission的问题,遂记录。
正文
1. Unprotected报错
在把私钥放入~/.ssh/
文件夹后发现报错如下:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/seanzou/.ssh/id_rsa.52pi' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/seanzou/.ssh/id_rsa.52pi": bad permissions
sean@177.177.177.177: Permission denied (publickey).
思考了一下,发现问题是因为私钥id_rsa.52pi
的权限太open了,意思就是谁都可以改,太不安全了,运用命令ls -ll
发现文件的权限如下:
-rw-r--r--@ 1 seanzou staff 6570 Mar 11 19:00 id_rsa.52pi
-rw-r--r--@ 1 seanzou staff 1437 Mar 11 12:11 id_rsa.52pi.pub
-r--------@ 1 seanzou staff 1766 Dec 10 2021 id_rsa.cs
-rw------- 1 seanzou staff 2675 Dec 12 16:28 id_rsa_do_vpn
除了第二个.pub
公钥以外,其他的都是私钥。我们发现其他的私钥,都是只有本人用户的权限,后面组和所有人的权限都是0(---
)。
这里我们稍微复习一下Unix或类Unix系统中文件系统权限的表示方法:
-rw-r--r--
这个字符串可以分为四部分理解,每部分都有其特定的意义:
- 第一个字符表示文件类型。在这个例子中,
-
代表这是一个普通文件。其他可能的字符包括d
(目录),l
(符号链接),以及其他几种特殊文件类型。 - 接下来的三个字符 (
rw-
) 表示文件拥有者(通常是创建文件的用户)的权限。r
表示读取权限,w
表示写入权限,-
表示没有执行权限。所以这里的 rw- 意味着文件拥有者可以读取和写入文件,但不能执行文件。 - 然后是三个字符 (
r--
),表示与文件拥有者在同一组的用户的权限。r
表示读取权限,两个-
表示这些用户没有写入和执行文件的权限。因此,组内的其他用户只能读取文件。 - 最后三个字符 (
r--
) 表示系统中其他所有用户的权限。同样,r
表示读取权限,两个-
表示没有写入和执行权限。这表示任何不是文件拥有者也不在文件组内的用户只能读取文件。
总结一下,-rw-r--r--
表示这是一个普通文件,文件的拥有者可以读取和写入文件,文件所在组的用户和系统中的其他用户只能读取文件,没有人有执行文件的权限。
2. 解决办法
知道了问题所在,其实解决办法就很简单了,直接用chmod
,如下:
sudo chmod 400 id_rsa.52pi
再用ls -ll
显示如下:
-r--------@ 1 seanzou staff 6570 Mar 11 19:00 id_rsa.52pi
-rw-r--r--@ 1 seanzou staff 1437 Mar 11 12:11 id_rsa.52pi.pub
然后ssh 登录,发现成功。
完结,撒花~!
总结
记录一下私钥的permission错误,同时这也提醒我们,千万要保护好自己的private key!
同时复习一下Unix或类Unix系统中文件系统权限的表示方法~。
参考
[1] ChatGPT
[2] 自己
Q.E.D.