这篇文章上次修改于 2142 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
我们常使用一般密码方式登录 SSH 客户端来远程管理 Linux 服务器,但该方式存在易被密码暴破的风险。所以,我们会禁用 root 账户登录或将 SSH 的端口设置为默认 22 以外的端口。其实,可以使用密钥方式登录来保证安全,放心地用 root 账户进行远程登录管理。
密钥登录的原理:利用密钥生成器制作一对密钥——一只公钥和一只私钥。将公钥添加到服务器的某个账户,然后在客户端利用私钥即可完成认证并登录。如果将公钥复制到其他账户甚至主机,利用私钥也可以登录。
下面来讲解如何制作密钥对,将公钥添加给账户,设置 SSH,最后通过客户端登录。
1.制作密钥对
使用OpenSSH在Windows端创建密钥对,当然你也可以在服务器端使用 ssh-keygen 创建,方法大体相同。
获取[Win32-OpenSSH]并将其解压,在解压得到的文件夹中打开终端,然后执行以下命令:
PS D:\省略路径\OpenSSH-Win64> ssh-keygen -t rsa -b 4096 <== 建立密钥对 [-b 参数为rsa秘钥对的长度bit]
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\用户名/.ssh/id_rsa): <== 按 Enter
Enter passphrase (empty for no passphrase): <== 输入密钥锁码,或直接按 Enter 留空
Enter same passphrase again: <== 再输入一遍密钥锁码
Your identification has been saved in C:\Users\用户名/.ssh/id_rsa. <== 私钥
Your public key has been saved in C:\Users\用户名/.ssh/id_rsa.pub. <== 公钥
The key fingerprint is:
SHA256:hZqJr5VKd8Wz48Cxxxxxx/n2sRCY8BMOfqR0lxxxxxx 用户名@设备名
The key's randomart image is:
+---[RSA 4096]----+
| . .o+o |
| E. . . |
| o= = o |
| . *.@ = |
| . + S @ . |
| + o + = . |
| o B = * . . |
| . B + + o.. o |
| =oo ....o |
+----[SHA256]-----+
密钥锁码会在使用私钥时要求输入,保护私钥不被盗用。当然,也可以留空,实现无密码登录。
在 C:\Users\用户名.ssh\ 中已经生成了两个密钥文件。id_rsa 为私钥,id_rsa.pub 为公钥。
2.在服务器上配置公钥
在需要配置的用户目录中建立 .ssh 的隐藏目录,上传公钥到服务并 cat 到对应 .ssh 目录中的 authorized_keys 文件内。
上传公钥到用户目录后,键入以下命令:
[root@host ~]$ cd .ssh
[root@host .ssh]$ cat ../id_rsa.pub >> authorized_keys
为了确保连接成功,请保证以下文件权限正确:
[root@host .ssh]$ chmod 600 authorized_keys
[root@host .ssh]$ chmod 700 ~/.ssh
3.修改 SSH 配置文件,打开密钥登录功能
编辑 /etc/ssh/sshd_config 文件,修改如下项:
PubkeyAuthentication yes
RSAAuthentication yes
#该项可能已被启用,若不存在则忽略就好
设置完成后重启 SSH 服务:
[root@host .ssh]$ service sshd restart
4.SSH客户端使用私钥登录
这里使用刚才的 OpenSSH 进行登录,在 OpenSSH 打开终端,键入以下命令:
ssh -i {parivate-rsa-path} {username}@{host} -p {port}
{}部分请自行替换,然后即可登录,过程中可能需输入密钥锁码。
如需在成功连接后关闭一般密码方式登录,可以编辑 /etc/ssh/sshd_config 文件,修改如下项:
PasswordAuthentication no
完成后再次重启 SSH 服务即可。
注:
[Win32-OpenSSH]:https://github.com/PowerShell/Win32-OpenSSH/releases
其实这次折腾也是为了配置 VSCode:Remote-SSH 进行开发做准备QwQ
没有评论