最近刚刚开了一个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 root@localhost.localdomain 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最后的“root@localhost.localdomain”是该密钥所关联的用户,服务器名为“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、配置sshdCentOS 7系统,修改sshd服务的配置文件
vi /etc/ssh/sshd_config