想用密钥的方式验证登录,authorized_keys 文件里的内容很重要,也就是它里面应该包含想要通过密钥方式验证登录的设备上的公钥文件的内容。另外这个文件的权限也非常重要。
查看一下用户主目录下的 .ssh 目录里的东西:
[wanghao@xb2-node ~]$ ls -la ~/.ssh
drwx------ 2 wanghao wanghao 61 Jan 11 20:54 .
drwx------ 3 wanghao wanghao 111 Jan 11 20:54 ..
-rw-rw-r-- 1 wanghao wanghao 401 Jan 11 20:54 authorized_keys
-rw------- 1 wanghao wanghao 1823 Jan 11 19:27 id_rsa
-rw-r--r-- 1 wanghao wanghao 398 Jan 11 19:27 id_rsa.pub
观察一下 authorized_keys 这个文件的权限,在列表的最前面那块字符表示的就是文件或者目录的权限。当前这个文件的权限是:
-rw-rw-r--
在 Linux 或者 macOS 操作系统里面就是用这种方法表示目录与文件的权限。从左往右,第一个字符表示的是文件与目录到底是文件还是目录,如果是文件,第一个字符会用 - 表示,如果是目录,第一个字符会用字母 d 表示。 第 2 至 4 个字符表示的是文件与目录的拥有者的权限,第 5 - 7 个字符表示的是用户组的权限,第 8 - 10 个字符表示的是其他人对这个文件或目录的权限。
表示权限,用的是三个字母,r 表示读取,w 表示写入,还有一个 x,表示执行。在上面你看到的权限里面,第一个字符是 - ,这就表示这是一个文件,不是一个目录。r 这个权限出现了三回。第一个 r 是属于文件拥有者的权限,第二个 r 权限属于用户组,第三个权限属于其它人。w 出现了两次,第一个 w 权限属于文件的拥有者,第二个 w 权限属于文件的用户组。
这几个权限会对应一个数字,r = 4,w = 2,x = 1。如果用数字表示 authorized_keys 这个文件的权限,应该是 664,第一个 6 是文件拥有者的权限,因为有 r 与 w 这两个权限, 4 + 2 = 6,所以可以用数字 6 表示文件拥有者的权限。文件的用户组的权限也是数字 6,其它人的权限可以用数字 4 表示,因为其它人只拥有一个 r 权限。
在列出的信息里面,你会发现 authorized_keys 这个文件名的左边,wanghao 出现了两次,左边的 wanghao 表示的是这个文件的拥有者,右边的 wanghao 表示的是这个文件所属的用户组。创建用户的同时会创建一个同名的用户组。
-rw-rw-r-- 1 wanghao wanghao 401 Jan 11 20:54 authorized_keys
用人话解释上面这条信息,authorized_keys 是个文件,它的拥有者叫 wanghao,对于这个文件的拥有者来说,有读取(r)与写入(r)这个文件的权限,没有执行(x)权限。 这个文件的用户组也叫 wanghao ,对于在 wanghao 这个用户组里的用户来说,对这个文件拥有读取与写入的权限 ,没有执行权限。对于不是 wanghao ,也不属于 wanghao 这个用户组的用户来说,对这个文件只拥有读取的权限。
authorized_keys 这个文件必须要设置成一个特定的权限,才能让使用密钥验证登录有效。执行:
chmod 600 ~/.ssh/authorized_keys
chmod(Change Mode) 这个命令是修改文件或目录权限用的命令,600 是要设置的权限,后面加上要设置的文件或目录。600 这个权限的意思就是,让文件的拥有者有 r 与 w 这两个权限,去掉其它所有人对这个文件的权限。
-rw------- 1 wanghao wanghao 401 Jan 11 20:54 authorized_keys
输入 exit 退出登录,重新再用 SSH 登录到服务器,你会发现,登录的时候就不需要输入用户的密码了,因为现在服务器可以通过密钥验证我们的身份。
— 摘自《小白兔的开发之路》