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就是保存公钥的文件。

如此,公钥就配置好了。

相关密钥的权限设置

  1. 本地相关文件权限
  • mykey私钥设置为600权限
  1. 远程服务器相关文件权限设置
  • .ssh目录设置为700
  • mykey.pub公钥设置为644
  • authorized_keys设置为600
  • known_hosts设置为644

特别提示:上述的文件和目录的权限设置非常重要,尤其是对于centos系列的发行版来说,设置不正确就极有可能登录不上。

配置ssh文件

需要对/etc/ssh/sshd_config文件作一些修改,包括修改端口号,取消密码登录、启用密钥登录

需要修改的地方如下:

1
2
3
4
5
Port 12345  ##12345改成你要用的端口号

PubkeyAuthentication yes ##启用密钥登录

PasswordAuthentication no ##关闭密码登录

重启ssh服务生效

1
sudo systemctl restart sshd