圈小蛙

给虚拟主机、VPS的Linux操作系统SSH远程访问配置密钥登录无密码访问

管理的Linux主机、VPS太多,有各种操作系统的,Centos、Ubuntu、Debian都有,且正常都是启用账号密码登录。运维不易,麻烦众多:一是密码比较难记住,二是经常收到僵尸网络的爆破攻击,三是管理起来不方便。因此需要配置使用配置密钥登录,一键管理。

一、常见的LinuxSSH的认证方式

常用的SSH认证方式有:

1. 基于主机IP(rhost)的认证:对于某个主机(IP)信任并让之登录,这种认证容易受到IP欺骗攻击。
2. Kerberos认证:一个大型的基于域的认证,这种认证安全性高,但是太复杂适用于企业环境,不方便部署。
3. PAM认证:类似于传统的密码认证,是绝大多数Unix/Linux系统自带的一个认证和记帐的模块,它的功能比较复杂,配置起来比较麻烦。而且,容易由于配置失误而引起安全问题。
4. 传统的Unix/Linux口令(或密码Password)认证:在客户端直接输入帐号密码,然后让SSH加密传输到服务器端验证,易遭受密码爆破攻击。
5. Public Key认证:该认证使用非对称算法,Public Key加密过的数据只有用与之相对应的Private Key才能解密。认证使用一对相关联的Key Pair(一个公钥Public Key,一个私钥Private Key)来代替传统的密码(或我们常说的口令,Password)。

二、Linux系统Public Key配置

1、生成SSH密钥对

可以在远端VPS上生成密钥,也可以在本地终端上进行操作,创建一对公私钥(公钥文件:~/.ssh/id_rsa.pub;私钥文件:~/.ssh/id_rsa

输入命令ssh-keygen,按几次回车就可以成功生成。

root@qxwa# ssh-keygen -t rsa #可选参数 -b 2048,CentOS7 中默认
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

中间步骤会提示输入密码passphrase,这个密码与与远程ssh登入密码无关,可以不设置,但是为了更安全,建议设置一个passphrase,这样,别人哪怕拿到密钥也没有用。

完成后在root用户的根目录中生成了一个.ssh的隐藏目录,内含两个密钥文件。id_rsa为私钥,id_rsa.pub为公钥。

2、安装公钥,将公钥文件复制到服务器上

以当前用户为root为例

创建.ssh目录,若前个步骤直接在服务器操作,则可以略过

mkdir /root/.ssh
cd /root/.ssh

把刚生成的id_rsa.pub(公钥)复制为远端的/root/.ssh/authorized_keys,并设置权限为只允许当前用户访问

chmod 600 /root/.ssh/authorized_keys
chmod 700 /root/.ssh

3、修改sshd配置文件

启用Public key认证并关闭传统密码认证,重启sshd服务生效。

vi /etc/ssh/sshd_config

PubkeyAuthentication yes
PasswordAuthentication no

service sshd restart

Exit mobile version