服务器SSH公私密钥对替代密码登录

25 年 12 月 8 日 星期一
2090 字
11 分钟

最近,因为申请不上从 Azure 教育邮箱认证了,就打算切换到其他云服务的服务器,但是发现所使用的云服务只提供密码登录的方式。这样不是很安全,如果不想自己的服务器变成别人的肉鸡,还是要做好最基础的安全防护。

新增用户代替 root 用户

服务器创建好后,默认会给出使用 root 用户密码登录方式,要防止别人对服务器暴力破解,其实改个用户名是最简单有效的方式,这就和我们的帐号密码一样。

所以,我们先要创建一个用户,用来代替 root 用户,后面再关闭 root 登录权限就好了。

sh
sudo adduser username

这个时候我们必须设置一个密码,这个密码是必须的,如果不输入就会随机生成,后面连接 SSH 的时候会用到。

新增用户代替root用户-新增用户

新增加的用户的默认权限不够,不能修改高权限的系统配置,我们后面也要禁用作为管理员的 root 用户,所以要先给新增的用户加一下管理员权限。

sh
sudo usermod -a -G sudo username
新增用户代替root用户-授予用户管理员权限

这个时候用新增的管理员用户就可以登录到服务器了。

使用新增用户登录服务器

为了保险起见,我们先登录到新增用户,看一下用户密码和设置的权限是否正常,这里我推荐使用 Tabby 进行 SSH 配置。当然,如果熟悉这些操作,就可以直接跳过了。

Tabby 我们可以到 SSH 配置修改之前的 SSH 登录用户名,改成新建用户名,新开一个 SSH 连接。

使用新增用户登录服务器-修改SSH配置用户名

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

使用新增用户登录服务器-输入登录密码

能登录说明用户的配置就差不多了,还要再检查一下用户权限。命令执行后需要输入一下密码,如果配置正确,会返回 root。

sh
sudo whoami
使用新增用户登录服务器-用户权限

禁止 root 用户登录

现在有了管理员权限的用户,就可以像 root 用户一样折腾服务器了,原来的 root 用户登录就没有必要保留了,我们可以把它禁用掉啦。

接下来输入下面的命令,编辑配置文件。

sh
sudo vi /etc/ssh/sshd_config

找到 PermitRootLogin 配置,通过 i 进入追加编辑状态,把最前面的 # 删除,并把原本后面的设置改成 no

conf
PermitRootLogin no
禁止root用户登录-开启设置

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

禁止root用户登录-保存设置

然后我们还需要重启一下 SSH 服务,输入下面的命令

sh
sudo systemctl restart sshd

//or

sudo service ssh restart

这个时候我们可以打开之前的用 root 登录的 SSH 窗口重新连接一下,会发现 root 用户是登录不了的,这时候服务器已经基本上比较安全了。

但是,如果不是使用像 Tabby 这样的能记住用户密码的终端,每次 SSH 登录就需要重新输入密码的。

所以,我们还可以配置服务器,用公私密钥对自动登录。

生成SSH密钥对

我们可以使用下面的命令生成 SSH 密钥,这里使用兼容性最好的 RSA 密钥对生成密钥。这个时候会让你填写一下生成的密钥位置和密码,这里直接回车保持默认就行。

sh
ssh-keygen -t rsa -b 4096 -C "注释信息"
参数说明
-t指定密钥类型。支持 RSA、Ed25519 和 ECDSA 密钥,其中RSA 是目前最常用也最兼容的加密算法
-b设置密钥长度位数。数字越大越安全,4096 是目前推荐的安全长度
-C添加一个注释,这个注释会附加在公钥末尾,方便识别是谁的密钥,一般填写邮箱
生成SSH密钥对

生成的 RSA 密钥对默认保存在 ~/home/username/.ssh 目录下面,会生成 id_rsaid_rsa.pub 这两个文件。

名称说 明
id_rsa私钥,存在于 SSH 客户端,需要保存好,千万不能泄露给任何人,这是连接服务器的唯一凭据。
id_rsa.pub公钥,存在服务器的上,用于和私钥匹配,可以放在多个服务器上,用同一个私钥连接。

我们可以先使用 Tabby 的 SFTP 进入到这个目录,把 id_rsa 私钥保存到本地,这个后面使用密钥对登录配置的时候需要用到。

下载SSH私钥

因为 SSH 密钥对登录使用的文件名称并不是这两个文件,所以我们还需要手动创建 authorized_keys 文件,并把 id_rsa.pub公钥的内容复制进去。

我们可以使用 cat 命令把 id_rsa.pub 的内容打印出来,并复制文本。

sh
cat ~/.ssh/id_rsa.pub
复制SSH公钥

复制好公钥后,我们创建并编辑 authorized_keys 文件,把复制的公钥粘贴进去,按一下 Esc 键,输入 :wq 后回车保存配置。

sh
vi ~/.ssh/authorized_keys
复制公钥到authorized_keys

最后,给手动创建的 authorized_keys 文件增加一下读写权限就好了。

sh
chmod 600 ~/.ssh/authorized_keys
公钥设置完成

启用 SSH 密钥登录

生成好密钥对后,我们就可以开启 SSH 密钥的登录配置了。输入下面的命令,编辑 sshd_config 配置。

sh
sudo vi /etc/ssh/sshd_config

找到 PubKeyAuthentication 配置后,通过 i 进入追加编辑状态,把最前面的 # 注释删掉。

conf
PubKeyAuthentication yes
启用SSH密钥登录_开启配置

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

启用SSH密钥登录_保存配置

最后我们重启一下 SSH 服务,输入下面的命令

sh
sudo systemctl restart sshd

//or

sudo service ssh restart

到这里我们就可以使用 SSH 密钥对登录啦,有些教程会让你直接关闭密码登录,但还是得保证能用密钥对登录才行,不然就进不去服务器啦。

使用 SSH 密钥对登录

我们打开 Tabby 设置界面,进入配置连接,点击新增配置,选择 SSH 连接。

使用SSH密钥对登录-新增配置
使用SSH密钥对登录-SSH配置

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

使用SSH密钥对登录-添加密钥
使用SSH密钥对登录-保存配置

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

使用SSH密钥对登录-完成登录

禁止 SSH 密码登录

如果想要服务器更安全些,在配置完密钥对登录后,还可以直接禁止 SSH 使用密码进行登录。前面的配置已经能够保证相对的安全了,所以下面的配置按需要进行配置就好。

输入下面的命令,编辑 sshd_config 配置。

sh
sudo vi /etc/ssh/sshd_config

找到 PasswordAuthentication 配置后,通过 i 进入追加编辑状态,把最前面的 # 注释删掉。

conf
PasswordAuthentication no
禁止 SSH 密码登录_开启配置

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

禁止 SSH 密码登录_保存配置

最后我们重启一下 SSH 服务,输入下面的命令

sh
sudo systemctl restart sshd

//or

sudo service ssh restart

这样配置就完成了,以后服务器登录都只能通过密钥对登录了,配置好私钥一定要保管好。

结语

总算是把这些配置整理好了,以后等又需要换服务器的时候,就不用到处找那些零散的博客了。好了,我得去折腾我的服务器了:)

文章标题:服务器SSH公私密钥对替代密码登录

文章作者:rowink

文章链接:https://exi.ink/posts/%E6%9C%8D%E5%8A%A1%E5%99%A8ssh%E5%85%AC%E7%A7%81%E5%AF%86%E9%92%A5%E5%AF%B9%E6%9B%BF%E4%BB%A3%E5%AF%86%E7%A0%81%E7%99%BB%E5%BD%95

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。