最近,因为申请不上从 Azure 教育邮箱认证了,就打算切换到其他云服务的服务器,但是发现所使用的云服务只提供密码登录的方式。这样不是很安全,如果不想自己的服务器变成别人的肉鸡,还是要做好最基础的安全防护。
新增用户代替 root 用户
服务器创建好后,默认会给出使用 root 用户密码登录方式,要防止别人对服务器暴力破解,其实改个用户名是最简单有效的方式,这就和我们的帐号密码一样。
所以,我们先要创建一个用户,用来代替 root 用户,后面再关闭 root 登录权限就好了。
sudo adduser username这个时候我们必须设置一个密码,这个密码是必须的,如果不输入就会随机生成,后面连接 SSH 的时候会用到。

新增加的用户的默认权限不够,不能修改高权限的系统配置,我们后面也要禁用作为管理员的 root 用户,所以要先给新增的用户加一下管理员权限。
sudo usermod -a -G sudo username
这个时候用新增的管理员用户就可以登录到服务器了。
使用新增用户登录服务器
为了保险起见,我们先登录到新增用户,看一下用户密码和设置的权限是否正常,这里我推荐使用 Tabby 进行 SSH 配置。当然,如果熟悉这些操作,就可以直接跳过了。
在 Tabby 我们可以到 SSH 配置修改之前的 SSH 登录用户名,改成新建用户名,新开一个 SSH 连接。

这个时候会提示我们需要输入登录密码,不是之前的 root 用户密码,是上面创建用户时输入的密码。填写密码,记得勾上记住密码,不然下次连接还要重新输入一遍。

能登录说明用户的配置就差不多了,还要再检查一下用户权限。命令执行后需要输入一下密码,如果配置正确,会返回 root。
sudo whoami
禁止 root 用户登录
现在有了管理员权限的用户,就可以像 root 用户一样折腾服务器了,原来的 root 用户登录就没有必要保留了,我们可以把它禁用掉啦。
接下来输入下面的命令,编辑配置文件。
sudo vi /etc/ssh/sshd_config找到 PermitRootLogin 配置,通过 i 进入追加编辑状态,把最前面的 # 删除,并把原本后面的设置改成 no
PermitRootLogin no

修改完成后,按一下 Esc 键,输入 :wq 后回车保存配置。

然后我们还需要重启一下 SSH 服务,输入下面的命令
sudo systemctl restart sshd
//or
sudo service ssh restart这个时候我们可以打开之前的用 root 登录的 SSH 窗口重新连接一下,会发现 root 用户是登录不了的,这时候服务器已经基本上比较安全了。
但是,如果不是使用像 Tabby 这样的能记住用户密码的终端,每次 SSH 登录就需要重新输入密码的。
所以,我们还可以配置服务器,用公私密钥对自动登录。
生成SSH密钥对
我们可以使用下面的命令生成 SSH 密钥,这里使用兼容性最好的 RSA 密钥对生成密钥。这个时候会让你填写一下生成的密钥位置和密码,这里直接回车保持默认就行。
ssh-keygen -t rsa -b 4096 -C "注释信息"| 参数 | 说明 |
|---|---|
| -t | 指定密钥类型。支持 RSA、Ed25519 和 ECDSA 密钥,其中RSA 是目前最常用也最兼容的加密算法 |
| -b | 设置密钥长度位数。数字越大越安全,4096 是目前推荐的安全长度 |
| -C | 添加一个注释,这个注释会附加在公钥末尾,方便识别是谁的密钥,一般填写邮箱 |

生成的 RSA 密钥对默认保存在 ~/home/username/.ssh 目录下面,会生成 id_rsa 和 id_rsa.pub 这两个文件。
| 名称 | 说 明 |
|---|---|
| id_rsa | 私钥,存在于 SSH 客户端,需要保存好,千万不能泄露给任何人,这是连接服务器的唯一凭据。 |
| id_rsa.pub | 公钥,存在服务器的上,用于和私钥匹配,可以放在多个服务器上,用同一个私钥连接。 |
我们可以先使用 Tabby 的 SFTP 进入到这个目录,把 id_rsa 私钥保存到本地,这个后面使用密钥对登录配置的时候需要用到。

因为 SSH 密钥对登录使用的文件名称并不是这两个文件,所以我们还需要手动创建 authorized_keys 文件,并把 id_rsa.pub公钥的内容复制进去。
我们可以使用 cat 命令把 id_rsa.pub 的内容打印出来,并复制文本。
cat ~/.ssh/id_rsa.pub
复制好公钥后,我们创建并编辑 authorized_keys 文件,把复制的公钥粘贴进去,按一下 Esc 键,输入 :wq 后回车保存配置。
vi ~/.ssh/authorized_keys
最后,给手动创建的 authorized_keys 文件增加一下读写权限就好了。
chmod 600 ~/.ssh/authorized_keys
启用 SSH 密钥登录
生成好密钥对后,我们就可以开启 SSH 密钥的登录配置了。输入下面的命令,编辑 sshd_config 配置。
sudo vi /etc/ssh/sshd_config找到 PubKeyAuthentication 配置后,通过 i 进入追加编辑状态,把最前面的 # 注释删掉。
PubKeyAuthentication yes

然后,按一下 Esc 键,输入 :wq 后回车保存配置。

最后我们重启一下 SSH 服务,输入下面的命令
sudo systemctl restart sshd
//or
sudo service ssh restart到这里我们就可以使用 SSH 密钥对登录啦,有些教程会让你直接关闭密码登录,但还是得保证能用密钥对登录才行,不然就进不去服务器啦。
使用 SSH 密钥对登录
我们打开 Tabby 设置界面,进入配置连接,点击新增配置,选择 SSH 连接。


填写完 SSH 配置后,我们需要点击密钥,然后选择添加密钥,选中我们之前下载到本地的私钥文件后,点击保存配置。


这个时候我们就可以打开配置的 SSH 终端了,如果登录成功就说明密钥对登录配置好了。

禁止 SSH 密码登录
如果想要服务器更安全些,在配置完密钥对登录后,还可以直接禁止 SSH 使用密码进行登录。前面的配置已经能够保证相对的安全了,所以下面的配置按需要进行配置就好。
输入下面的命令,编辑 sshd_config 配置。
sudo vi /etc/ssh/sshd_config找到 PasswordAuthentication 配置后,通过 i 进入追加编辑状态,把最前面的 # 注释删掉。
PasswordAuthentication no

然后,按一下 Esc 键,输入 :wq 后回车保存配置。

最后我们重启一下 SSH 服务,输入下面的命令
sudo systemctl restart sshd
//or
sudo service ssh restart这样配置就完成了,以后服务器登录都只能通过密钥对登录了,配置好私钥一定要保管好。
结语
总算是把这些配置整理好了,以后等又需要换服务器的时候,就不用到处找那些零散的博客了。好了,我得去折腾我的服务器了:)