我们新开一台 Linux 服务器时,一般使用密码登录。但是,一般的密码方式登录,容易有密码被暴力破解的问题。所以,一般我们会修改 SSH 的默认端口,从默认的 22 设置为其它的端口,或者禁用 root 账户登录。其实,有一个更好的办法来保证安全,而且让你可以放心地用 root 账户从远程登录——那就是通过密钥方式登录。下面来讲解如何在 Linux 服务器上制作密钥对,将公钥添加给账户,设置 SSH ,最后通过客户端登录。
检查现有 SSH 密钥对
为防止覆盖现有密钥,需要对 ~/.ssh/
路径进行检查,可以使用以下命令来检查是否有密钥对:
ls -la ~/.ssh/id_*.pub
如果有密钥对则需要注意备份,没有可直接进行下一步。
生成密钥对(公钥与私钥)
执行 ssh-keygen
命令,生成 id_rsa
和 id_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/
路径下已经有公钥和私钥文件了:
在服务器上安装公钥
安装公钥需要一个叫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
啦
本文地址: SSH 通过密钥登录