我们新开一台 Linux 服务器时,一般使用密码登录。但是,一般的密码方式登录,容易有密码被暴力破解的问题。所以,一般我们会修改 SSH 的默认端口,从默认的 22 设置为其它的端口,或者禁用 root 账户登录。其实,有一个更好的办法来保证安全,而且让你可以放心地用 root 账户从远程登录——那就是通过密钥方式登录。下面来讲解如何在 Linux 服务器上制作密钥对,将公钥添加给账户,设置 SSH ,最后通过客户端登录。

检查现有 SSH 密钥对

为防止覆盖现有密钥,需要对 ~/.ssh/ 路径进行检查,可以使用以下命令来检查是否有密钥对:

ls -la ~/.ssh/id_*.pub
我之前创建过,可以看到我已经有密钥对了
此时我将文件移动到了别的位置,已经提示没有文件了

如果有密钥对则需要注意备份,没有可直接进行下一步。

生成密钥对(公钥与私钥)

执行 ssh-keygen 命令,生成 id_rsaid_rsa.pub 两个文件,id_rsa 是私钥,生成后需要保存下来,后面使用的密钥就是这个文件;id_rsa.pub 是公钥,密钥生成过程中可根据提示对密钥设置密码,设置密码可增加安全性,在使用密钥登录时需要输入,如不需要设置密码也可直接回车。

root@VM-28-10-debian:~/.ssh# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:4wyPGQ8DDuAN76v50HBaWFZEWjBecyzoOi2PQ4yoeXE root@VM-28-10-debian
The key's randomart image is:
+---[RSA 3072]----+
|.. o=B..         |
|..=.*.o.         |
| .oB. .          |
|  =+ .           |
|+oo+. = S        |
|o*B.E  % .       |
|o+==  o =        |
|oo=.             |
| +o.             |
+----[SHA256]-----+
root@VM-28-10-debian:~/.ssh#

一路回车下来,密钥已经生成好了,此时我们再次查看~/.ssh/路径下已经有公钥和私钥文件了:

公钥(id_rsa.pub)和私钥(id_rsa)

在服务器上安装公钥

安装公钥需要一个叫authorized_keys的文件,我们可以执行:

touch ~/.ssh/authorized_keys

命令来创建,并为authorized_keys设置文件权限:

chmod 600 ~/.ssh/authorized_keys

此时我们只需将公钥追加到authorized_keys中即可:

root@VM-28-10-debian:~# cd .ssh
root@VM-28-10-debian:~/.ssh# cat id_rsa.pub >> authorized_keys

调整sshd配置

执行

nano /etc/ssh/sshd_config

主要调整以下参数(没有可自行添加,有的为注释状态,只需去掉前面的#即可):

Port SSH端口 # 正常为注释状态,需要去掉#进行修改,修改后需要服务器防火墙放行对应端口
RSAAuthentication yes
PubkeyAuthentication yes
PermitRootLogin yes
AuthorizedKeysFile .ssh/authorized_keys

修改完成后,执行

systemctl restart sshd

重启 sshd 服务使修改生效

保存私钥到本地

我们可以使用 scp 来传输私钥,scp 的传输过程也是经过加密的,用法:

scp 文件位置 目标位置

我们需要将服务器上的 id_rsa 传输到本地,只需要以管理员权限打开一个Windows终端,执行:

scp -P 自定义SSH端口 用户名@服务器IP地址:~/.ssh/id_rsa D:\

执行后需要输入密码,完成后私钥就保存在 D 盘了

使用私钥登录

我们将私钥放在C:\Users\用户名\.ssh下,无需改名,打开一个Windows终端,执行

ssh 用户名@服务器IP地址 -p 自定义SSH端口

即可直接登录服务器啦

禁用密码登录

执行

nano /etc/ssh/sshd_config

调整以下参数:

PasswordAuthentication no

保存后执行

systemctl restart sshd

重启 sshd 服务使更改生效。此时没有密钥再登录就会提示Permission denied

说点什么
你是我一生只会遇见一次的惊喜...
支持Markdown语法
好耶,沙发还空着ヾ(≧▽≦*)o
Loading...