HTTP、HTTPS、SSH区别以及如何使用ssh-keygen生成密钥对

发布于:2025-05-11 ⋅ 阅读:(13) ⋅ 点赞:(0)

HTTP、HTTPS、SSH区别以及如何使用ssh-keygen生成密钥对

HTTP (HyperText Transfer Protocol)

  • 定义:应用层协议,用于通过Web传输数据(如网页、文件)
  • 默认端口:80
  • 机制:客户端发送Get请求,服务器返回文件或数据流,基于请求-响应模型
  • 安全性:数据明文传输,容易被窃听和篡改
  • 下载性能:无加密,传输速度最快,适合大文件下载

HTTPS (HTTP Secure)

  • https是http的加密版本,使用TLS/SSL加密通信
  • 默认端口:443
  • 机制:同HTTP一样,但是通过TLS/SSL加密,确保数据不被拦截或篡改
  • 安全性:数据加密,防止中间人攻击,服务器通过TLS证书验证身份
  • 下载性能:加密增加少量开销(TLS握手),速度略慢于HTTP

SSH (Secure Shell)

  • 安全协议,用于远程登陆、命令执行和文件传输
  • 默认端口:22
  • 机制:通过加密回话传输文件,支持SCP/SFTP或Git协议,基于持久连接
  • 安全性:数据全程加密,使用公钥/私钥认证
  • 下载性能:适合小文件或高安全性场景

三者区别对比

特性 HTTP HTTPS SSH
加密性 无加密,明文传输,易被拦截 TLS/SSL 加密,安全 默认加密(RSA/Ed25519),安全
端口 80 443 22
认证方式 无或用户名/密码、Token 同 HTTP,另需服务器 TLS 证书 密码或公钥/私钥认证
下载场景 公开文件、网页内容 安全文件下载、API、Git 仓库 远程文件、Git 仓库、服务器管理
Git 下载 HTTPS URL,需凭证 HTTPS URL,需凭证 SSH URL,密钥认证
速度 快(无加密开销) 略慢(加密开销) 较慢(加密和会话开销)
工具 浏览器、curl、wget 浏览器、curl、wget scp、sftp、Git
连接模型 请求-响应,无状态 请求-响应,无状态 会话式,双向通信
适用性 公开资源下载 安全下载、API 调用 私有资源、需认证的下载

使用ssh-keygen生成密钥对

  • 简介
    • ssh-keygen是Openssh提供的命令工具,用于生成和管理ssh密钥对,包含
      • 私钥:保密,存储在本地(如~/.ssh/id_rsa)
      • 公钥:可分享,添加到远程服务器或服务(如:~/.ssh/id_rsa.pub)
  • 前提要求
    • 系统要求
      • Linux/macOS:通常预装OpenSSH(验证:ssh-keygen --version)
      • Windows:使用Git bash、PowerShell(Windows10/11内置OpenSSH)或WSL
    • 安装OpenSSH(如果未安装)
      • Linux:sudo apt install opens-client(Debian/Ubuntu)或sudo yum install opens-clients(CentOS)
      • macOS:brew install openssh
      • Windows:启用"OpenSSH客户端"或安装Git for Windows
    • 终端基础:熟悉命令行操作即可

生成密钥对

1、打开终端(Linux/macOS终端,windows的Git bash或PowerShell)

2、执行以下命令

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

# -t rsa:算法类型(RSA,也可选 ecdsa 或 ed25519)。
# -b 4096:密钥长度(4096 位更安全,默认 2048 位)。
# -C "your_email@example.com":添加注释(通常是邮箱,便于识别)。

3、提示输入保存路径,如下所示(一般默认即可,直接回车)

Enter file in which to save the key (/home/user/.ssh/id_rsa):

# 默认路径:按 Enter,保存到 ~/.ssh/id_rsa(私钥)和 ~/.ssh/id_rsa.pub(公钥)。
# 自定义路径:输入路径(如 ~/.ssh/my_key),生成 my_key 和 my_key.pub。

4、设置密码

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

# 无密码:直接按 Enter,方便自动登录(如 Git 推送),但安全性稍低。
# 设置密码:输入密码,每次使用私钥需输入,适合服务器登录。
# 建议:GitHub 等场景可不设密码,服务器登录建议设密码。

5、确认生成

Your identification has been saved in /home/user/.ssh/id_rsa
Your public key has been saved in /home/user/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx your_email@example.com

如果是一路回车选择默认操作,那么公钥和私钥所在路径如下

# ~是Home(家)目录
私钥:~/.ssh/id_rsa
公钥:~/.ssh/id_rsa.pub

其他算法

  • Ed25519(推荐,现代且高效),操作如下
ssh-keygen -t ed25519 -C "your_email@example.com"
# 优点:速度快、安全性高。
# 缺点:老系统可能不支持。
  • ECDSA,操作如下
ssh-keygen -t ecdsa -b 521 -C "your_email@example.com"
# 适合资源受限设备
  • 推荐:优先 Ed25519,若需兼容性用 RSA(4096 位)

将公钥添加到Github

1、登陆Github,进入 Settings > SSH and GPG keys > New SSH key

2、粘贴公钥,设置标题(如 “MyKey”),点击 Add SSH key即可

3、测试联通性,执行以下命令

ssh -T git@github.com

会输出以下内容

Hi username! You've successfully authenticated...

如果出现以下内容,敲yes回车即可

The authenticity of host 'github.com (222.222.222.222)' can't be established.
# RSA key fingerprint is 66:77:ffc:a5:76:28:55:3g:6h:1b:56:4e:tb:df:gg:g8.
# Are you sure you want to continue connecting (yes/no)?

将公钥复制到远程服务器

执行以下命令

ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host
# 替换 user@remote_host为你的真实服务器ip地址(如 john@192.168.1.100),添加时需要输入密码
# 或手动将公钥追加到服务器的 ~/.ssh/authorized_keys。

测试联通性,执行以下命令

ssh user@remote_host
# 若没有密码,则会直接连接成功
# 若设密码,输入私钥密码。
# 如果出现以下内容,敲yes回车即可
# Are you sure you want to continue connecting (yes/no)?

网站公告

今日签到

点亮在社区的每一天
去签到