公钥私钥详细讲解,SSH密钥远程连接服务器,代码,命令详解

公钥及私钥

公钥和私钥是非对称加密技术中的两个关键组成部分,它们是一对配对的密钥,用于加密和解密信息,确保信息传输的安全性。下面我将详细解释公钥和私钥的概念、用法和使用流程,并用现实生活中的例子来帮助理解。

公钥和私钥的基本概念

- 公钥(Public Key):可以公开分享的密钥,用于加密信息或验证数字签名。 - 私钥(Private Key):必须保密的密钥,用于解密信息或创建数字签名。

使用流程

1. 密钥对生成: - 就像你拥有一个邮箱,你需要一把钥匙来打开它。在加密世界中,这把钥匙分为两部分:一把可以复制并随意分发的公钥,和一把只有你知道的私钥。 - 你使用特定的软件或命令生成一对密钥,比如使用`ssh-keygen`生成SSH密钥对。

2. 公钥分享: - 你将公钥分享给需要与你安全通信的人,就像你告诉朋友你的邮箱地址,他们可以给你发送信件。 - 在现实生活中,这可以通过电子方式(如电子邮件)或物理方式(如写在纸上)进行。

3. 信息加密: - 当别人想要给你发送加密信息时,他们使用你的公钥来加密信息,确保只有拥有对应私钥的你能够解密。 - 类似地,如果你收到一封加密的信件,你需要用你的私钥(邮箱钥匙)来打开它。

4. 信息解密: - 你使用私钥解密收到的信息,恢复原始内容。 - 就像你用钥匙打开邮箱,取出里面的信件。

5. 数字签名: - 为了证明信息确实是你发送的,你可以使用私钥对信息进行数字签名。 - 类似地,你给信件签名,收信人通过你的公钥验证签名,就像验证信件上的签名是否为你的笔迹。

6. 签名验证: - 收信人使用你的公钥来验证数字签名,确认信息的真实性和完整性。 - 就像收信人通过对比签名和已知的你的笔迹来确认信件确实是你写的。

SSH密钥访问服务器

使用cmd生成密钥并连接服务器

1.win+r输入cmd打开终端

2.输入ssh-keygen -N passwd 生成密钥并指定私钥密码

查看密钥路径,上传公钥到目标服务器指定路径并进行ssh密钥登录

使用 MobaXterm本地终端生成密钥并连接服务器

删除现有密钥对防止干扰,并生成新的密钥对

验证生成成功并上传到目标主机

使用密钥进行访问

私钥地址:C:\Users\Administrator\OneDrive\文档\MobaXterm\home\.ssh\id_rsa

根据moba情况进行调节

命令解析

`ssh-keygen`是一个用于生成、管理和转换SSH公钥/私钥对的命令行工具

基本语法

ssh-keygen [options] [file]

ssh-keygen:命令本身。 [options]:可选参数,用于指定不同的配置和行为。 [file]:指定生成的密钥文件名。如果不指定,默认生成两个文件:一个私钥和一个公钥。

常用选项

-A:生成所有可能的主机密钥对。 -b bits:指定密钥的位数,默认是2048位。 -C "comment"`:为密钥添加注释,通常用于标识密钥的用途或所有者。 -E:指定椭圆曲线加密算法。 -f:指定密钥文件的保存路径。 -N:为密钥设置密码。 -t:指定密钥类型,如`rsa`、`dsa`、`ecdsa`、`ed25519`等。 -y:从私钥中提取公钥。

代码演示

生成密钥对

1. 打开终端

2. 运行ssh-keygen命令:输入ssh-keygen命令并按回车键

ssh-keygen -t rsa -b 4096 -C "Your Name"

这个命令会生成一个4096位的RSA密钥对,并添加一个注释"Your Name"。

3. 指定密钥保存位置:系统会提示输入文件名来保存新的密钥。如果不输入任何内容并按回车键,密钥将被保存在默认位置`~/.ssh/id_rsa(私钥)和`~/.ssh/id_rsa.pub(公钥)。

Enter file in which to save the key:

4. 设置密钥密码:系统会询问是否要为密钥设置密码。这是可选的,建议设置以增加安全性。

Enter passphrase (empty for no passphrase):

将公钥上传到服务器

生成密钥对后,需要将公钥上传到远程服务器,以便SSH服务可以使用它来验证身份。通过`ssh-copy-id`命令进行上传: ssh-copy-id user@hostname

user:远程服务器上的用户名。 hostname:远程服务器的地址。

这个命令会自动将公钥复制到远程服务器的`~/.ssh/authorized_keys`文件中。

使用密钥进行SSH连接

一旦公钥被添加到远程服务器,就可以使用SSH连接到服务器,而不需要输入密码: ssh -i ~/.ssh/id_rsa user@hostname

-i:指定私钥文件的路径。 user:远程服务器上的用户名。 hostname:远程服务器的地址。

如果在生成密钥时设置了密码,系统会提示输入。

修改ssh配置文件禁止用户使用密码进行登录

root@metasploitable:~# vim /etc/ssh/sshd_config

50 PasswordAuthentication no //禁止SSH使用密码登录

root@metasploitable:~# /etc/init.d/ssh restart //重启ssh服务 * Restarting OpenBSD Secure Shell server sshd [ OK ]

[an error occurred while processing the directive]