采用密钥方式登录Linux服务器

最近刚刚开了一个VPS,查看内存占用的时候,发现有很多sshd进程占用了大量内存和CPU资源,一搜才意识到问题的严重性。互联网上有大量骇客进行扫描行为,采用密码登录方式的话,简单密码会在不久后被扫描工具字典破解;如果被针对性攻击的话,位数短的密码也很快就会被密码爆破的方式暴力破解,不说服务器沦为肉鸡,密码也会被加入到字典中广为流传,如果其他服务器也采用相同密码,那就很容易在扫肉鸡的过程中全部沦陷。

可以通过加长密码长度、改变ssh端口的方式,来提升被破解的难度;不同服务器使用不同密码,来避免一旦失陷,自己的常用密码会成为字典中的一员。但是密码长度过长、个数过多, 会增加记忆难度,建议就是采用密钥方式来登录服务器。

一、密钥登录机制

这里使用的是RSA加密算法,RSA是基于密钥对的对称加密算法,公钥加密的内容只能用私钥解开,反之亦然。密钥方式登录,就是服务端保存公钥,客户端保存私钥,在登录的时候,服务器用公钥加密一段随机内容发给客户端,客户端用私钥解出后,再发给服务器,服务器验证解出的内容是否正确,正确即密钥验证通过。

密钥登录方式,可以和密码登录方式同时使用,先验证了密钥,再验证账号密码,不冲突。

密钥登录方式,多个密钥可以关联同一个账号,这样多个人需要使用同一个账号的时候,可以给他们分发不同的密钥,如果要停止某人的使用权限,只需要在服务器上删除对应的公钥就可以了。

二、密钥生成

密钥对可以在任意设备上生成,不过最方便的还是在被登录的服务器上生成,这样会生成密钥的时候就可以省略账号和服务器信息了。输入以下命令生成一个RSA密钥对

ssh-keygen -t rsa -b 3072

-t参数指定加密算法为rsa,-b参数指定密钥长度,可以是1024、2048、3072等等,位数越长,被暴力破解所需的时间越久。会提示输入密钥文件名、口令

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
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.
The key fingerprint is:
79:77:a2:0d:39:d9:e2:00:e7:f8:62:1e:c6:e1:ed:92 [email protected]
The key's randomart image is:
+--[ RSA 3072]----+
|                 |
|                 |
|      . .        |
|       = . +     |
|      o S B + .  |
|     o + + B o   |
|      B.o o .    |
|     +E+         |
|      ...        |
+-----------------+

root用户生成的密钥文件名默认为“/root/.ssh/id_rsa”,不需要改变的话直接回车即可

口令是用于加密私钥文件内容的,口令不正确将不能解出私钥内容,这样即使私钥文件丢失了,只要不知道口令,光有私钥文件也无法使用,建议设置。

以上命令执行后,会生成私钥文件“/root/.ssh/id_rsa”和公钥文件“/root/.ssh/id_rsa.pub”,打开公钥文件,会看见

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCz9JrfvDiQLvrNbmIMsvJqSNAmKuNW0tbW99l7Kh1s26pm7BAlm3F6HnxVGD/huxogQbuyReD/TsQduhA1P3xvQ7j2YGk4PrYBu4OMIPeJWgLH3pJvPuT+YHxIRBCF07gCfHRfjTVIJAjreh78veGlOkHubVt3+BZrwkOfZJ3d08o/1T6bqgtQfZK1vbdaE8Xege5qtxzYz5XzqCogd8lzR2ZG+7Y4IZNavPDwLMJY6k3XZwVwrhP+vTpaxOPF13SR1v+sdBMxI3wRShdz9hdMUQ3Ih5SxmolgKKkYAdkfu+1zEkhkv0VEqjsdMvc0AoFWRvlIYMjMMlOtkhic2XZM/mjB30HZrOE6YAEz+/y9bHwx3nBAEkq2g/CY/TZXhG8JcGo/68S+KL2yz95ffMMpW6mtB7mtgtvxiMN8sWh+E/e6Lyre2kAu1l7DVi0McSQ91LIHo9OAqa+whhGlTlHTivzP3pCKgMNBgpia0JvMf9TLaIOUvEV7NUpqh0Hsr50= root@localhost.localdomain

最后的“[email protected]”是该密钥所关联的用户,服务器名为“localhost.localdomain”,用户是“root”,ssh-keygen不指定参数的情况下生成的公钥文件默认和当前用户及本机关联。

二、服务器配置

1、导入公钥

默认的公钥配置文件为用户目录下的“.ssh/authorized_keys”,每一行为一条公钥配置信息。

首先要确认”.ssh”目录存在,权限为700,如果第一步是在本机上进行的,那么就没问题。

然后将公钥文件的内容追加到“authorized_keys”中就可以了,如果authorized_keys之前不存在,则需要将权限设为600

cd ~/.ssh
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys

2、配置sshd

vi /etc/ssh/sshd_config

确认以下配置项的值,”#“后为注释

# 是否允许RSA密钥对方式登录系统,仅针对 version 2。
RSAAuthentication yes
PubkeyAuthentication yes

# 密钥配置文件名称,为用户目录下的.ssh/authorized_keys
AuthorizedKeysFile      .ssh/authorized_keys

# 禁用密码登录,可以先确认客户端可以密钥登录后再改
PasswordAuthentication no

重新启动sshd服务后生效

service sshd restart

三、客户端配置

1、Bitvise SSH Client

Bitvise SSH Client是一款Windows平台下的SSH工具,在login选项卡中,进入“Client key manager”,Import私钥文件,然后登录方式“Initial method”选择publickey,选择刚才导入的Clientkey,如果有私钥口令在Passphrase中填入,就能以密钥方式登录

2、Linux Shell

在使用ssh命令的时候,用“-i”参数指定私钥文件即可,私钥文件权限应改为600,假设私钥文件为“myservkey”

ssh xxx.xxx.xxx.xxx -i myservkey

猜你喜欢

转载自www.linuxidc.com/Linux/2017-12/149719.htm