CentOS设置证书登录并禁止密码登录
普通用户登录时,以往的做法往往是使用账号密码登录,但是这样的登录方式风险相当高,使用密钥登录能大大降低风险
1. 生成密钥
ssh 公钥认证是ssh认证的方式之一。通过公钥认证可实现ssh免密码登陆,ssh-keygen
可用来生成ssh公钥认证所需的公钥和私钥文件。使用 ssh-keygen
时,请先进入到 ~/.ssh 目录,不存在的话,请先创建。并且保证 ~/.ssh 以及所有父目录的权限不能大于 711。使用 ssh-kengen 会在~/.ssh/目录下生成两个文件,不指定文件名和密钥类型的时候,默认生成的两个文件是
id_rsa和id_rsa.pub,id_rsa是私钥文件,id_rsa.pub是公钥文件。生成ssh key的时候,可以通过 -f 选项指定生成文件的文件名,-C指定备注。
ssh-keygen -t rsa -b 4096 -f test -C "test key"
如果没有指定文件名,会询问你输入文件名
Generating public/private rsa key pair.
Enter file in which to save the key (/home/huqiu/.ssh/id_rsa):
之后,会询问你是否需要输入密码。输入密码之后,以后每次都要输入密码。请根据你的安全需要决定是否需要密码,如果不需要,直接回车
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
为了让私钥文件和公钥文件能够在认证中起作用,请确保权限正确。
对于.ssh 以及父文件夹,当前用户用户一定要有执行权限,其他用户最多只能有执行权限。
对于公钥和私钥文件也是: 当前用户一定要有执行权限,其他用户最多只能有执行权限
2. 将公钥copy到目标机器的~/.ssh目录下
scp ~/.ssh/<公钥文件>.pub root@<目标机器IP>:~/.ssh/<公钥文件>.pub
# 例子:
# scp ~/.ssh/nighthawk.pub root@192.168.31.15:~/.ssh/nighthawk.pub
3. 将公钥设置为该服务器的登录公钥
cat ~/.ssh/<公钥文件>.pub >> ~/.ssh/authorized_keys
# 例子:
# cat ~/.ssh/nighthawk.pub >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
4. 关闭selinux
vim /etc/selinux/config
# 将SELINUX=enforcing改为SELINUX=disabled
5. 禁止密码登录,改用私钥登录
vim /etc/ssh/sshd_config
#禁用root账户登录,如果是用root用户登录请开启
PermitRootLogin yes
# 是否让 sshd 去检查用户家目录或相关档案的权限数据,
# 这是为了担心使用者将某些重要档案的权限设错,可能会导致一些问题所致。
# 例如使用者的 ~.ssh/ 权限设错时,某些特殊情况下会不许用户登入
StrictModes no
# 是否允许用户自行使用成对的密钥系统进行登入行为,仅针对 version 2。
# 至于自制的公钥数据就放置于用户家目录下的 .ssh/authorized_keys 内
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# 有了证书登录了,就禁用密码登录吧,安全要紧
PasswordAuthentication no
6. 重启服务
CentOS7:systemctl restart sshd
CentOS6:service sshd restart
这样一来在计算机持有密钥的情况下就可以不使用账号密码登录服务器了
Quinn Tian
问一下,我按上面配置了禁止密码登录,但是还是可以密码登录,是怎么回事?也重启服务了
Pony
@Quinn Tian : 有没有重启服务呢