作者:网络傅老师
特别提示:未经作者允许,不得转载任何内容。违者必究!
Debian如何配置SSH密钥对验证
《傅老师Debian小知识库系列之26》——原创
==前言==
傅老师Debian小知识库特点:
1、最小化拆解Debian实用技能;
2、所有操作在VM虚拟机实测完成;
3、致力于最终形成Debian小知识手册;
适合人群:想通俗易懂地学习Debian相关知识的同学
阅读建议:无。过于精炼易懂,正常看就行。
所用版本:Debian 12.4
一、概念
不是使用传统的密码登录SSH(有安全隐患),而是使用密钥对(公钥+私钥)验证的方法登录SSH,只有私钥的持有者才能登录,大大提高了安全性。
二、前置知识
熟悉本专栏的同学都知道,之前已经介绍过SSH密码登录的方法(链接:SSH远程登录),那时为了便于同学们在windows环境下远程连接Debian去做实验,所以很早介绍了SSH。但是,实际工作中,该方法有安全隐患,因为一旦密码泄露,那么在任何一台客户端都能登录。
所以,在实际工作中,用的更多的是本篇介绍的方法:密钥对验证。
所谓密钥对,就是一把“公钥”、一把“私钥”,它们是一一对应的关系,且只有私钥的持有者才能登录。还记的古代战争时的虎符吗?你持有的一半虎符要与另一半虎符匹配上才行。如图26.1所示。
图26.1 密钥对验证机制示意
三、操作方法
案例:实现Windows 10客户端通过密钥对SSH登录Debian12服务器。拓扑如图26.2所示。(Windows客户端和Linux客户端的操作稍有区别,本篇均有介绍)
图26.2 密钥对SSH登录拓扑图
1、Win10客户机创建密钥对
C:\>ssh-keygen -t ecdsa
Generating public/private ecdsa key pair.
Enter file in which to save the key (C:\Users\teacher.fu/.ssh/id_ecdsa):
//密钥对保存的默认位置,不用更改,直接回车即可
Enter passphrase (empty for no passphrase): //直接回车,忽略秘钥保护短语
Enter same passphrase again: //直接回车,确认忽略秘钥保护短语
Your identification has been saved in C:\Users\teacher.fu/.ssh/id_ecdsa.
Your public key has been saved in C:\Users\teacher.fu/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:BnFwL40vu3bp56R+QXId5XrzojIXrVc3ClOpak9ZYfI teacher.fu@FU-PC
The key's randomart image is:
+---[ECDSA 256]---+
| o.o ..|
| + + .. |
| . o o. +...|
| . o. *oo. |
| S .+oE...|
| . o += .o=|
| . .+++o.+|
| .+*o=o.. |
| .o+=Oo. |
+----[SHA256]-----+
PS:上述操作有3点要注意:
(1)没有使用秘钥保护短语,可以实现免密登录。但生产环境中不建议这样用。
(2)运行 ssh-keygen 命令时,默认使用 RSA 算法,但可以通过 -t 选项指定其他算法。更安全和高效的算法有本例中使用的ecdsa和Ed25519 。
(3)如果客户端是Linux系统,这一步的命令是一样的,只不过生成的密钥对保存的路径不同(用户家目录的.ssh/下)。
命令执行成功后,在目标目录可以看到生成的一对秘钥。如图26.3所示。
其中,id_ecdsa是私钥,客户端自己保管;id_ecdsa.pub是公钥,要提供给SSH服务器。
图26.3 密钥对文件
2、将公钥上传至SSH服务器
(1)去Debian服务器,管理员为用户teacherfu创建保存公钥的目录.ssh,并为该用户赋予目录权限
root@Debian:~# mkdir /home/teacherfu/.ssh
root@Debian:~# chown teacherfu:teacherfu /home/teacherfu/.ssh/
root@Debian:~# ls -ld /home/teacherfu/.ssh/
drwxr-xr-x 2 teacherfu teacherfu 4096 5月 13 11:15 /home/teacherfu/.ssh/
(2)回到Windows10客户端,复制公钥至Debian服务器
C:\>scp C:\Users\teacher.fu\.ssh\id_ecdsa.pub teacherfu@192.168.9.75:/home/teacherfu/.ssh/authorized_keys
//注意目标文件名必须是authorized_keys
teacherfu@192.168.9.75's password: //输入teacherfu的密码
id_ecdsa.pub 100% 182 89.3KB/s 00:00
PS:如果客户端是Debian系统,1条命令就能完成了。如下:
root@localhost:~# ssh-copy-id teacherfu@192.168.9.75
3、配置SSH服务器支持秘钥对验证
root@Debian:~# nano /etc/ssh/sshd_config
内容如下:
……
PubkeyAuthentication yes //确认PubkeyAuthentication配置项为yes
重启服务
root@Debian:~# systemctl restart sshd //重启服务
4、客户端验证
看,没有输入密码,直接SSH登录了。如图26.4所示。
图26.4 密钥对SSH验证登录
很简单,而且安全实用!同学们快试一下吧~~
尾部有傅老师的微信名片
欢迎沟通交流:)