SSH协议与应用

目录

SSH协议简介

公钥与私钥的作用

签名与加密

签名

使用场景一

加密

[Git 服务免密登录配置](#Git 服务免密登录配置)


SSH协议简介

SSH(Secure Shell)是一种加密的网络传输协议,用于在不安全的网络中安全地远程登录及传输文件。它通过加密和认证机制,确保通信内容不被窃听、篡改,常见于服务器管理、代码版本控制等场景;

公钥与私钥的作用

当用户需要远程访问某个具体服务时,若密码需通过网络传输,若加密强度不足,可能被中间人攻击窃取,所以引入了公钥 / 私钥体系(非对称加密)
公钥 / 私钥体系特点:

  • 无需传输私钥:认证过程中,客户端仅用私钥对随机数据签名,服务端用公钥验证签名,私钥从未在网络中出现,保障数据传输的安全性;
  • 一次配置,永久免密:适用于服务器管理、代码仓库拉取等需要频繁认证的场景;
  • 私钥可挂失:若私钥泄露,只需删除服务端对应的公钥,无需修改所有相关系统的密码;
  • 私钥签名的唯一性确保身份不可伪造,公钥验签的公开性确保任何人可验证;
    SSH 依赖非对称加密技术,通过一对密钥(公钥和私钥)实现安全认证,两者的关系如下:

签名与加密

签名

签名是一种用于验证数据完整性和发送者身份的技术,基于哈希加密算法实现,其核心作用如下:

  • 证明数据由合法发送者生成(防冒充);
  • 确保数据在传输过程中未被篡改(防篡改);

使用场景一

当用户在ubuntu系统生成私钥id_rsa公钥id_rsa.pub,且将公钥告知 Git 服务器,当用户采用Git提交原始数据时,详细过程如下所述;

签名生成过程:

  1. Git 会自动对ubuntu系统所提交的内容生成一个哈希值(如a1b2c3d4);
  2. 然后用 私钥对哈希值进行加密,得到一个签名(例如encrypted_hash
  3. 当用户提交代码时,Git 会将原始数据和签名一同存储或传输

签名验证过程:

  1. Git 服务器首先采用公钥解密签名,从签名中提取出ubuntu系统提交时加密的哈希值(``a1b2c3d4)
  2. 然后Git 服务器直接对原始数据应用相同的哈希函数,重新生成哈希值(b2假设为a1b2c3d4)
  3. 对比两个哈希值,若一致,则证明数据未被篡改(哈希值相同),数据确实由持有私钥的用户生成(只有持有私钥的用户能加密出可被公钥解密的签名);

加密

加密 是将明文数据通过密钥转换为密文的过程,确保只有授权方能用对应密钥将密文还原为明文,其核心目标是确保数据在传输或存储过程中不被未授权者读取或篡改。因此SSH协议中只有持有对应私钥的人能解密,确保数据传输安全;
加密流程如下:

  1. 发送方获取 接收方的 公钥;
  2. 发送方公钥 加密数据,得到密文;
  3. 接收方用自己的 私钥 解密密文,还原原始数据

Git 服务免密登录配置

步骤一:生成 SSH 密钥对并且查看公钥

ubuntu虚拟机打开终端,输入以下命令生成密钥(无需输入密码可直接按回车跳过)

bash 复制代码
# ssh-keygen: 生成SSH密钥对的工具
# -t rsa:     指定密钥的类型为RSA,RSA是非对称加密算法
# -b 4096:    设置密钥的位数为4096
# -C "email@example.com" : 为密钥添加注释,一般使用邮箱地址作为注释内容

ssh-keygen -t rsa -b 4096 -C "email@example.com"
bash 复制代码
#ubuntu系统查看密钥
cat ~/.ssh/id_rsa.pub 

步骤二:将公钥添加到 Git 服务端

登录 Gitee, 点击设置, 下拉点击安全设置中SSH公钥;

自定义标题名称,粘贴公钥内容,点击确定,输入当前账号的密码即可;

步骤三:配置ubuntu系统的 Git 客户端

基本配置

bash 复制代码
# 设置git客户端的用户名称,自由设置即可
git config --global user.name "shuju"

# 设置git客户端的邮箱,本地记录提交作者的标识,可随意设置,建议使用真实邮箱
git config --global user.email "13361241467@163.com"

# 查看全局配置
git config --global --list

验证连接

首次连接会提示确认指纹,输入 yes 后回车即可;

bash 复制代码
# 连接Gitee服务器,使用固定用户名为git(Gitee强制要求)

ssh -T git@gitee.com

修改仓库地址为 SSH 协议

打开Gitee的某个仓库页面,复制克隆远程仓库的指令,ubuntu本地客户端执行即可;

相关推荐
七歌杜金房8 小时前
我终于又有了自己的 Linux 电脑
linux·debian·mac
tntxia1 天前
linux curl命令详解_curl详解
linux
扛枪的书生1 天前
Linux 网络管理器用法速查
linux
顺风尿一寸2 天前
Java Socket 内核之旅:从 SocketChannel.read() 到 tcp_recvmsg 与 epoll 的完整调用链路
linux
XIAOHEZIcode2 天前
Ubuntu 终端美化全栈指南:Bash 到 Kitty 踩坑实录
linux·ubuntu·命令行
唐青枫2 天前
别再只会用 cron:Linux systemd Timer 定时任务实战详解
linux
AlfredZhao4 天前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
戴为沐5 天前
Linux内存扩容指南
linux
zylyehuo5 天前
Linux 彻底且安全地删除文件
linux
用户805533698036 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式