Linux服务器使用密钥登录
登录linux服务器有2种方式,一是使用用户名/密码;二是使用密钥。
本文介绍使用密钥登录的基础知识和相关设置方法。
使用密码登录的缺点
使用密码登录,最大的缺点是存在暴力破解的隐患。
举个例子,随便买个国外大厂的vps,一个小时后再登录,就会发现很多次登录失败的提示。
全世界的黑客,7x24小时的使用工具和字典库扫描你的服务器,即使登录不成功,也相当于一种另类的DDOS了。
尽管我们可以把SSH的端口设置为默认的22以外的不常用的端口,依然不能从根本上解决问题。
使用密钥登录的优势
密钥登录的原理是:利用密钥生成器制作一对密钥:一只公钥和一只私钥。然后将公钥添加到服务器的某个账户上,在客户端利用私钥即可完成认证并登录。
使用密钥登录,一个优势是从根本上解决了密码暴力破解的问题。因为登录根本不需要密码。
另一个优势是可以在任意服务器上配置好公钥,然后使用同一个的私钥来登录。
密钥类型选择
常见的密钥各类有dsa、rsa、 ecdsa、ed25519这几种,下面分别介绍,看过你就知道怎么选择了。
总体上,根据数学特性来分类,dsa/rsa是一类,ecdsa/ed25519是一类,后者算法更先进。
dsa
dsa密钥因为安全问题,早已被弃用。
rsa
rsa密钥是目前兼容性最好的,应用最广泛的类型,一般在用ssh-keygen工具生成key的时候,默认使用的也是这种类型。
不过rsa密钥也有安全问题:在生成key时,如果指定的key size太小的话,存在被破解的隐患。如果一定要用rsa密钥,推荐key size为4096。我以前在使用rsa密钥时,都是设置4096。
注:开源社区在使用新技术方面一向激进,最新的Ubuntu22.04已经不再支持rsa密钥登录了。
ecdsa
ecdsa密钥最主要的问题,在于它是由臭名昭著的NSA贡献的。仅凭这一点这足以让人放弃了。
另外说一个热知识,SELINUX也是由NSA开发的。
ed25519
ed25519是目前最安全、加解密速度最快的key类型,由于其数学特性,它的key的长度比rsa小很多,优先推荐使用。它目前唯一的问题就是兼容性,即在旧版本的ssh工具集中可能无法使用。
总结
毫无疑问,ed25519是密钥的最佳选择。
具体配置方法
生成ed25519密钥
1 | ssh-keygen -t ed25519 |
假设此处生成的私钥为mykey
,公钥为mykey.pub
。
服务器上配置公钥
新建存放密钥的文件夹.ssh
1 | mkdir ~/.ssh |
把公钥上传到linux服务器
执行下面命令:
1 | cat mykey.pub >> ~/.ssh/authorized_keys |
authorized_keys
就是保存公钥的文件。
如此,公钥就配置好了。
相关密钥的权限设置
- 本地相关文件权限
mykey
私钥设置为600
权限
- 远程服务器相关文件权限设置
.ssh
目录设置为700
mykey.pub
公钥设置为644
authorized_keys
设置为600
known_hosts
设置为644
特别提示:上述的文件和目录的权限设置非常重要,尤其是对于centos
系列的发行版来说,设置不正确就极有可能登录不上。
配置ssh文件
需要对/etc/ssh/sshd_config
文件作一些修改,包括修改端口号,取消密码登录、启用密钥登录
需要修改的地方如下:
1 | Port 12345 ##12345改成你要用的端口号 |
重启ssh服务生效
1 | sudo systemctl restart sshd |