生成ED25519密钥并使用密钥登录管理VPS

无论VPS还是独服,机器到手的第一件事就是禁止密码登录,替换成证书登录。因为安全。

其实换成证书登录非常简单,使用上也非常方便。

这里选择使用ED25519,因为ED25519加密解密很快,生成时间短而且安全性更高,rsa则加密解密稍慢,生成时间长,安全性没有ED25519高,只是RSA基本都是默认,所以用的人更多而已,但是强烈建议转换为ED25519

1、首先需要生成证书,Putty、Xshell都可以,事实上如果你是使用Windows 10,并保持更新,只需要打开CMD命令窗口,同样可以。
Xsheall 是最为简单的,图形化窗口,工具—–新建用户密钥生成向导,向导模式,简单点下一步就可以了,而putty和cmd窗口都是使用命令生成。下面介绍下使用Windows 10系统CMD窗口来生成。

鼠标右键点击左下角的开始徽标,打开PowerShell窗口(使用PowerShell窗口因为漂亮些),输入以下命令:

ssh-keygen -t ed25519

Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\thedo/.ssh/id_ed25519):

这是问你生成的密钥保存在那里,默认文件名是 id_ed25519 ,选择默认可直接回车,不过建议保存到D盘根目录 D:\ssh-key 这样方便找。放C盘根目录可能有权限问题失败,选择管理员可解。

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

这是问你密码,和再次确认密码,就是证书读取密码,不设密码就直接回车。只要你保存好私钥,可以不设密码。

Your identification has been saved in D:\ssh-key.
Your public key has been saved in D:\ssh-key.pub.
The key fingerprint is:
SHA256:xsJIhlo+7z8Zk/rVt4pDgt1xUCni6z54bBxgs8b5gB0 SSH-Key
The key’s randomart image is:

没错,这样就完成了,打开你的D盘根目录,其中ssh-key是你私钥,一定要保管好,以后都要用,而 ssh-key.pub 是公钥,是放上VPS上的,丢了也没关系,私钥里面也包含公钥的内容。

2、将公钥放到VPS上,用任意文本编辑器,如Notepad++、Sublime Text等打开公钥文件,你会看到类似于 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMTpjYMlckGmEUzJrHDxEzZaR6VGJ1Js7Z6LT9GeM8ne SSH-Key-ED25519 的一行,这就是你的公钥,你需要把它上传到你的VPS,方式一,用 echo 命令写入(将下面改成你的):

echo ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMTpjYMlckGmEUzJrHDxEzZaR6VGJ1Js7Z6LT9GeM8ne SSH-Key-ED25519 > /root/.ssh/authorized_keys

方式二,直接将你的公钥文件ssh-key.pub改成authorized_keys,并上传到 /root/.ssh 目录,最后给目录和文件设置读写权限,命令: chmod 600 /root/.ssh && chmod 700 /root/.ssh/authorized_keys

有多台VPS就重复上面的做法,把你所有的VPS,都如此加上密钥。如果你只有一台VPS,那么你可以直接在VPS上生成,命令是一样的 ssh-keygen -t ed25519 -C "SSH-Key",但是你要把私钥下载下来才能使用,VPS上不建议保存私钥备份。也不建议每一台VPS都生成一套密钥,这样你需要保管和使用多套密钥,会增加混乱和麻烦。

一个专业性的建议是:你可以分别生成两套密钥,重要机器使用一套;玩具、试用、测试等则用另一套。相当于做一个隔离。

3、禁止密码登录、修改默认端口。

使用证书登录了,当然要把不安全的密码登录禁止掉,因为密码存在着暴力猜解的可能,要使密码又复杂又好记,事实上很难做到,很多时候,大多数人往往就是都对自己设置的密码过分自信。尤其现在那么多的拖库事件。编辑 /etc/ssh/sshd_config 找出以下三项并修改:

#Port 22

#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2

#PasswordAuthentication yes

第一行是修改端口,第二行是允许证书,第三行就是密码登录。#是注释符,去掉#后修改才能生效,端口改成你喜欢的,比如改成3389,假装是Windows远程连接,将yes改成no就是禁止密码登录,对于新手,这里建议暂时保留22 :

Port 22
Port 3389
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no

暂时保留的用处是万一遇到端口没有放行(这在CentOS很常见)不至于没法连接。修改后,重启 SSH 服务 命令: service ssh restart/etc/init.d/ssh restartsystemctl restart ssh 都对(视版本不同),当然,直接重启系统最简单的,反正是新机器一开始的设置,重启没什么影响。重启ssh服务之后,用新端口连接,没有问题就可以把 Port 22 删除不保留.

4、大功告成。以后你就可以使用你的私钥连接你的VPS了,安全性大大增加。

附:私钥的保管

公钥可以明文保存,不需要在意,但是私钥一定要保管好。同样用任意文本编辑器打开私钥文件,会看到类似以下的典型私钥格式:

—–BEGIN OPENSSH PRIVATE KEY—– >vPsb3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACDE6Y2DJXJBphFMyaxw8RM2WkelRidSbO2ei0/RnjPJ3gAAAJhkU1vhZFNb
4QAAAAtzc2gtZWQyNTUxOQAAACDE6Y2DJXJBphFMyaxw8RM2WkelRidSbO2ei0/RnjPJ3g
AAAEBXj7XPkziZxLpE9lSH1LONWGzR/E2R+QLJ6+8zUt0FvsTpjYMlckGmEUzJrHDxEzZa
R6VGJ1Js7Z6LT9GeM8neAAAAD1NTSC1LZXktRUQyNTUxOQECAwQFBg==
—–END OPENSSH PRIVATE KEY—–

一个专业建议:你可以将私钥修改一下再保管,例如在结尾的==之前加一个0,改成Bg0;或者在开头部分加上你的名字首拼音,或者将开头和结尾的字母大小写对换,方式自己想,只要你知道和记得。这样,即使明文保管也不担心,因为私钥根本不能直接使用。