1、概念
-
在基于 SSH 建立连接时使用密钥对验证,可以省去输入密码的步骤(即“免密登录”),同时也避免因密码泄漏等问题导致出现安全问题。
-
最终的验证的机制是,将本地的私钥与远程的公钥进行配对,配对成功即可。
2、详细
- 进行密钥对验证,需要先进行一些准备:
对上图的补充:
1、注意区别,普通的 SSH 登录即验证密码登录,是本地需要保存远程的公钥,而密钥对验证,是远程需要保存本地的公钥。
2、远程保存公钥的文件(公钥库文件)的路径是由远程的系统中的/etc/ssh/sshd_config
这一配置文件中的AuthorizedKeysFile
配置的,当然,一般也无需更改。
3、远程保存公钥的文件(公钥库文件)各个用户之间不是共享。比如,A 希望以密钥对验证的方式远程登录 B,B 中有两个用户,一个是 abc 另一个是 xyz,当 A 生成密钥对中的公钥仅被写入到/home/abc/.ssh/authorized_keys
中的时候,A 只能以 abc 的身份进行免密登录,而不能以 xyz 的身份进行免密登录,除非 A 生成的密钥对中的公钥也写入了/home/xyz/.ssh/authorized_keys
中。
4、最终,只需要确保本地的私钥安全即可。
3、本地:生成密钥对
-
先在本地生成密钥对,使用
ssh-keygen
命令。 -
ssh-keygen
命令有一个选项-t
,用来指定密钥对的生成算法,比如说,RSA
等。 -
生成的密钥对的命名、保存位置采用默认的即可,一般无需变动。默认的保存位置是
~/.ssh
目录下,即哪一个用户使用的ssh-keygen
命令,密钥对就保存在其家目录下的.ssh
目录中。 -
默认生成的私钥的名称是
id_xxx
,公钥的名称是id_xxx.pub
,其中xxx
为生成密钥对的算法。 -
在生成密钥对的时候,会提示输入一个密码,这个一般不需要,直接敲击回车,密码为空即可。
4、本地:将生成的公钥提交给远程
- 这个方法有很多,比如说使用
scp
命令、使用一些文件传输工具等。
5、远程:将公钥写入其的公钥库文件
-
注意,远程上一开始可能没有公钥库文件,这个时候可以手动创建,在创建的时候要注意,文件的所在路径以及文件名都必须与本机上的
/etc/ssh/sshd_config
这个配置文件中的完全一致。 -
采用
cat
命令加输出重定向>>
,将公钥以追加的方式写入公钥库文件。 -
如果是新创建的公钥库文件,务必更改权限为
600
,即rw-------
,确保安全。 -
修改远程上的 SSH 服务端配置文件,即
/etc/ssh/sshd_config
,将其中的PubkeyAuthentication
为yes
。根据实际情况进行,如果默认生效则无需修改,如若修改,修改后重启 SSH 服务即service sshd restart
。
6、其他
- 一旦完成了密钥对验证成功配置,可以考虑将远程的
/etc/ssh/sshd_config
配置文件中的PasswordAuthentication
修改为no
,即不允许通过密码验证登录。
网友评论