使用SSH密钥对实现免密安全登录云服务器

目录

一、前言

二、原理

三、步骤

1.在本机生成密钥对

2.将公钥注入华为云主机

3.将密钥对绑定到云主机

4.导入密钥到终端


一、前言

因为学习需要,我去华为云上创建主机。可是我并没有一个公网IP,无法设置访问控制组,仅允许我一个人登录。通过搜索“我的IP地址”查到的基站地址也会影响到一些不相干的人。虽然说哈,也许没人会攻击我一个一穷二白的学生(可能都不知道有这样一个服务器),但还是好奇,有什么更好的办法吗

好的,ssh密钥对就是用在这里的

二、原理

(可以直接通过目录跳转到部署哦)

SSH(Secure Shell)密钥对是一种用于身份验证的加密技术,由一对非对称密钥组成:

私钥:保存在本地,绝不外泄,用于身份验证。

公钥:可公开分发,放置在远程服务器上,用于验证私钥持有者的身份。

比如:现在有两台实验用的机器,一台命名为服务器(192.168.4.215),一台命名为客户端(192.168.4.207)。之后仅会在客户端上使用ssh链接服务器,或是将客户端上将公钥传递给服务机。

平时在~/.ssh的文件一般有两个,known_hosts和authorized_keys。事先清空.ssh中的这些文件。

在客户端上创建一个文件,将其使用scp复制到服务端。

期间其发出的信息翻译后如下:

无法确认主机 '192.168.4.215 (192.168.4.215)' 的真实性。

ECDSA 密钥指纹为 SHA256:STfR49OGFHwf7r3ih0kxaSaY8yn4/NOGtAf+AAMuIc4。

ECDSA 密钥指纹为 MD5:98:0c:51:ff:5a:50:a3:e1:a6:13:aa:ed:79:d3:ae:cb。

您确定要继续连接吗(是/否)?是

警告:已将 '192.168.4.215' (ECDSA) 永久添加到已知主机列表(known_host)中。

也就是说,此时让它继续连接后,系统就会将有关于192.168.4.215的信息记录在known_hosts中。查看客户端中的known_hosts可以发现:

里面是一串公钥。也就是说,known_hosts中存储的是已知服务器的公钥。而再去查看服务器中,发现

.ssh文件还未被创建。

接下来再在客户机上创建一个密钥对,并将公钥复制到服务端

再去查看。客户端中仅有刚刚创建的密钥对和已知主机的公钥

而服务器中有一串已认证的公钥

内容与客户端刚刚生成的公钥一致

综上:服务器验证客户端的身份,使用authorized_keys文件;而客户端验证服务器的身份,使用known_hosts文件

接下来的步骤中,将导入密钥对并绑定的操作就是替代了上面的将公钥保存到authorized_keys中。

公钥密码学基于单向函数的概念:

容易计算:用公钥加密数据

难以逆向:没有私钥的情况下解密数据

在RSA算法中,这基于大数分解难题

  • 公钥 = (n, e),其中 n = p × q(两个大质数的乘积),e是一个满足 1 < e < φ(n)  的值

  • 私钥 = (n, d),其中 d 需要从 e × d ≡ 1 (mod φ(n))  中算出,φ(n) = (p-1) × (q-1)

  • 知道 n 很容易验证加密,但不知道 p 和 q 就很难解密(对于真实的4096位RSA,n有六百多位,使用世界上最快的计算机,分解也需要数百万年)

登录时的验证过程:

  1. 客户端声明:"我要用某个密钥登录"

  2. 服务器检查 authorized_keys 中是否有这个公钥

  3. 如果有,服务器生成一个随机挑战(challenge)

  4. 客户端用私钥签名这个挑战

  5. 服务器用存储的公钥验证签名

使用shell密钥对的优点

安全性高:几乎无法通过暴力破解方式攻击。

与IP无关:密钥与服务器IP无关,便于迁移和管理。

无需记忆密码:尤其适合自动化脚本和频繁登录的场景。

三、步骤

1.在本机生成密钥对

使用下面的命令生成密钥对

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

-t rsa 指定密钥类型。华为云支持的算法有:RSA、ECDSA、EdDSA

-b 4096:指定密钥长度为4096位,安全性更高。但是部分终端的部分版本可能不支持长度过大(比如xshell 5 不支持4096位密钥(当然经过测试,xshell5的密钥也不能导入))

-C是指为你的密钥添加一个注释,是可选的,但是可以写一个便于区分

我这里是在windows中生成的

接着会询问保存位置、加密等,按需输入后

PS C:\Users\***> ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\***/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
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:mJddHM9L8JTGidgm/C3fGam8FalCw+EcO8s9qLQMn8o ***@goodcomputer
The key's randomart image is:
+---[RSA 4096]----+
|         . ooo.o |
|          +++B=  |
|          ++*o= o|
|       o o Xo..* |
|      o S + Bo+.+|
|       o . = *.o.|
|        = + . +  |
|      .  *   .   |
|       E.        |
+----[SHA256]-----+

生成后的位置在C:\Users\你的用户名/.ssh/id_rsa

其中

id_rsa:私钥文件

id_rsa.pub:公钥文件(可公开)

2.将公钥注入华为云主机

在华为云控制台中,找到密钥对管理

点击导入密钥对->导入公钥。找到刚刚的存放位置,选择刚刚创建的公钥(id_rsa.pub)。勾选同意,然后选择确认,这样就创建了一个密钥对。

(当然,也可以直接点旁边的创建密钥对直接创建一个密钥对,就不用之前的步骤了,但是得到私钥会经过一次网络传输,有点风险)

3.将密钥对绑定到云主机

在刚刚的页面中跳转到云服务器列表,找到需要绑定密钥的云主机,点击绑定,将密钥对绑定到需要的主机上。为了安全考虑,可以勾选“关闭密码登录方式”

4.导入密钥到终端

需要一个支持rsa 4096的shell( 如FinalShellMobaXterm 或 PuTTY这里使用finalshell)

导入创建的私钥(id_rsa)

新建连接。认证的方式选择公钥,点击浏览,选择刚刚导入的私钥

确定后会自行连接到连接主机,并自行通过用户认证

(这里是将云主机的信息记到自己的known_host中)

可以看到,如果刚刚勾选了“关闭密码登录方式”,此处会自动修改。也可以在这里修改

vim /etc/ssh/sshd_config

PasswordAuthentication no # 禁用密码登录
PubkeyAuthentication yes # 启用密钥认证

修改后需要重启sshd

systemctl restart sshd

(重启sshd不会影响已建立的连接)

使用SSH密钥对登录远程服务器,不仅提升了安全性,也简化了登录流程。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值