前言

刚刚不知道在做什么,不小心把自己~/.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--这个字符串可以分为四部分理解,每部分都有其特定的意义:

  1. 第一个字符表示文件类型。在这个例子中,-代表这是一个普通文件。其他可能的字符包括d(目录),l(符号链接),以及其他几种特殊文件类型。
  2. 接下来的三个字符 (rw-) 表示文件拥有者(通常是创建文件的用户)的权限。r 表示读取权限,w表示写入权限,-表示没有执行权限。所以这里的 rw- 意味着文件拥有者可以读取和写入文件,但不能执行文件。
  3. 然后是三个字符 (r--),表示与文件拥有者在同一组的用户的权限。r表示读取权限,两个-表示这些用户没有写入和执行文件的权限。因此,组内的其他用户只能读取文件。
  4. 最后三个字符 (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.


立志做一个有趣的碳水化合物