ssh 远程登录认证的方式有 Password、Keyboard Interactive 和 Public Key 这三种方式。
前面两种方式就是密码认证,只是第一种不需要交付,而第二种需要交互。一般用第一种,因为相对第2种方式,第一种只要在ssh终端里提前设置好用户名和密码就可以一键登录。而第三种用公钥方式认证是最安全的一种登录方式,因为认证信息不需要在互联网上传递,而这也是云服务器默认使用的一种方式。
以下是具体设置步骤。
以 root 用户登录进入目标 Linux 服务器,输入命令生成公私钥,如下:
ssh-keygen -t rsa
注:这里是使用命令在目标linux服务器上生成公私钥,但是其实这一步并不是一定要在目标服务器上生成,也可以单独生成公私钥,然后再将公钥上传到目标服务器上(如果有大量服务器需要统一配置公钥方式登录,这种方式就是最适合的),例如在客户端系统中生成公私钥,然后用命令:
ssh-copy-id username@ip_address
将公钥上传到目标服务器的目标主机的authorized_keys文件中。当然使用第三方工具生成公私钥也可以,大家自行选择适合自己的方式即可。
文件权限设置:
cd /root/.ssh
ls
可以看到已经生成的RSA公钥和私钥:
分别给密钥文件夹和对应的公私钥文件设置权限:
chmod 700 /root/.ssh/
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
将公钥添加到 ~/.ssh/authorized_keys 文件中:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
修改 sshd 服务的配置文件开启公钥认证:
vim /etc/ssh/sshd_config
--------------------------
PubkeyAuthentication yes //去掉#并改为yes,其实如果没有修改过,这就是系统默认的配置
如果需要配置root用户的ssh公钥登录,还需要做如下配置:
vim /etc/ssh/ssh_config
----------------------------
#PermitRootLogin prohibit-password //去掉#
修改完配置文件记得重启下ssh服务:
systemctl restart ssh
最后将私钥文件 ~/.ssh/id_rsa 下载并导入到对应的需要登录目标linux服务器的ssh客户端中即可(或者用户主目录下/.ssh文件夹里)。
注:本质上来说,其实就是各个ssh客户端将各自的rsa公钥上传到目标linux服务器的authorized_keys文件(白名单)中,然后登录的时候目标linux服务器用白名单中的公钥来验证各个ssh客户端的身份。