centos7 scp安全认证 ssh-keygen

ssh-keygen 命令详解

这个命令是用于生成 SSH 密钥对的。下面详细解释每个参数和整个命令的作用:

命令分解

bash 复制代码
ssh-keygen -t ed25519 -f /root/.ssh/mysql_backup_key -N "" -C "mysql_backup_$(hostname)_$(date +%Y%m%d)"

1. ssh-keygen

  • SSH 密钥生成工具
  • 用于创建、管理和转换 SSH 认证密钥

2. -t ed25519

  • -t: 指定密钥类型(type)
  • ed25519 : 一种现代的、安全的椭圆曲线加密算法
    • 更安全: 比传统的 RSA 算法更安全
    • 更快: 生成和验证速度更快
    • 更小: 密钥文件更小(公钥只有 68 个字符)
    • 更现代: 推荐用于新系统

3. -f /root/.ssh/mysql_backup_key

  • -f: 指定密钥文件保存路径(filename)
  • /root/.ssh/mysql_backup_key : 密钥文件的完整路径
    • 会生成两个文件:
      • /root/.ssh/mysql_backup_key → 私钥(保密!)
      • /root/.ssh/mysql_backup_key.pub → 公钥(可公开)

4. -N ""

  • -N: 设置密钥的密码(passphrase)
  • "" : 空字符串,表示不设置密码
    • 🔸 优点: 无需交互输入密码,适合自动化脚本
    • 🔸 缺点: 如果私钥泄露,他人可直接使用
    • 🔸 建议 :
      • 内网环境可以用空密码
      • 公网环境建议设置强密码

5. -C "mysql_backup_$(hostname)_$(date +%Y%m%d)"

  • -C: 添加注释(comment)
  • mysql_backup_$(hostname)_$(date +%Y%m%d) : 注释内容
    • $(hostname): 获取当前主机名
    • $(date +%Y%m%d): 获取当前日期(YYYYMMDD格式)
    • 示例 : mysql_backup_server01_20240125

执行后的结果

1. 生成的文件

bash 复制代码
/root/.ssh/mysql_backup_key     # 私钥(绝不要分享)
/root/.ssh/mysql_backup_key.pub # 公钥(可以分享给B服务器)

2. 文件内容示例

私钥文件 (mysql_backup_key):

复制代码
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACB3+4VbtX8Y4zvUxO5R9Q7Kq7l8mG6F1iR5W8tX7fQAAAAAKAAAAAQAAAAE
...
-----END OPENSSH PRIVATE KEY-----

公钥文件 (mysql_backup_key.pub):

复制代码
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICD... mysql_backup_server01_20240125

实际应用示例

场景:为 MySQL 备份创建专用密钥

bash 复制代码
# 1. 执行命令
ssh-keygen -t ed25519 -f /root/.ssh/mysql_backup_key -N "" -C "mysql_backup_$(hostname)_$(date +%Y%m%d)"

# 2. 输出示例
Generating public/private ed25519 key pair.
Your identification has been saved in /root/.ssh/mysql_backup_key
Your public key has been saved in /root/.ssh/mysql_backup_key.pub
The key fingerprint is:
SHA256:U6s4j7F8gH5d3s2a1Q9w8e7R6t5Y4u3I2o1P9l8K7n6M5v4C3x2Z1a9S8d7F6g5H4j3K2l1
The key's randomart image is:
+--[ED25519 256]--+
|          .o+    |
|         . o.o   |
|        . . o .  |
|       . o   o   |
|        S o . .  |
|       . = . . . |
|        . o o . .|
|         . o + . |
|          .E+ o  |
+----[SHA256]-----+

3. 设置正确的权限

bash 复制代码
# 非常重要!不正确的权限会导致 SSH 拒绝使用密钥
chmod 600 /root/.ssh/mysql_backup_key     # 私钥:只有所有者可读写
chmod 644 /root/.ssh/mysql_backup_key.pub # 公钥:所有者读写,其他人只读
chmod 700 /root/.ssh                     # .ssh目录:只有所有者可访问

为什么要这样配置?

1. 使用 ed25519 而不是 rsa

bash 复制代码
# 传统方式(旧)
ssh-keygen -t rsa -b 4096

# 现代方式(推荐)
ssh-keygen -t ed25519
算法 密钥长度 安全性 性能 密钥大小
RSA 4096 4096位
ed25519 256位 更高

2. 使用空密码 -N ""

  • 自动化脚本需要: cron 任务无法交互输入密码
  • 内网环境: 相对安全,可以接受
  • 替代方案 : 如果担心安全,可以用 ssh-agent 管理密码

3. 添加有意义的注释 -C

  • 便于管理: 知道这个密钥是做什么用的
  • 标识来源: 知道来自哪台服务器、什么时候创建的
  • 便于撤销: 如果需要撤销密钥,容易识别

如何使用这个密钥?

1. 在 A 服务器(备份源)

bash 复制代码
# 生成密钥(已执行)
# 现在可以使用私钥连接其他服务器

# 使用私钥连接B服务器
ssh -i /root/.ssh/mysql_backup_key backup_user@B服务器IP

2. 在 B 服务器(备份目标)

bash 复制代码
# 将A服务器的公钥添加到授权列表
echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICD... mysql_backup_server01_20240125" >> /home/backup_user/.ssh/authorized_keys

# 设置权限
chmod 600 /home/backup_user/.ssh/authorized_keys
chmod 700 /home/backup_user/.ssh

3. 在脚本中使用

bash 复制代码
# 备份脚本中使用密钥
scp -i /root/.ssh/mysql_backup_key backup_file.tar.gz backup_user@B服务器IP:/backup/

# 或
rsync -avz -e "ssh -i /root/.ssh/mysql_backup_key" backup_file backup_user@B服务器IP:/backup/

常用变体和选项

1. 设置密码的版本

bash 复制代码
# 交互式输入密码
ssh-keygen -t ed25519 -f /root/.ssh/mysql_backup_key -C "mysql_backup_key"

# 或命令行指定密码(不推荐,密码会留在历史记录)
ssh-keygen -t ed25519 -f /root/.ssh/mysql_backup_key -N "MyStrongPassword123!" -C "mysql_backup_key"

2. 传统 RSA 密钥(兼容旧系统)

bash 复制代码
# 2048位(最低安全要求)
ssh-keygen -t rsa -b 2048 -f /root/.ssh/backup_key -N "" -C "backup_key"

# 4096位(推荐)
ssh-keygen -t rsa -b 4096 -f /root/.ssh/backup_key -N "" -C "backup_key"

3. 更简洁的版本(用于自动化脚本)

bash 复制代码
# 使用默认路径 (~/.ssh/id_ed25519)
ssh-keygen -t ed25519 -N "" -C "auto_backup_$(date +%Y%m%d)"

安全注意事项

该做的

  1. 保护私钥 : chmod 600 私钥文件
  2. 定期更换: 每3-6个月更换一次密钥
  3. 限制使用: 在B服务器上限制密钥的用途
  4. 监控日志: 监控SSH登录尝试

不该做的

  1. 不要分享私钥: 永远不要通过邮件、聊天发送私钥
  2. 不要使用弱注释: 注释应该能清楚标识用途
  3. 不要忽略权限: 错误的权限SSH会拒绝使用密钥
  4. 不要长期不换: 密钥应该定期更换

总结

您使用的命令创建了一个:

  • 类型: ed25519(现代、安全、快速)
  • 位置 : /root/.ssh/mysql_backup_key
  • 密码: 无(适合自动化)
  • 注释: 包含主机名和日期(便于管理)

这是为MySQL备份任务创建专用SSH密钥的标准做法,既安全又便于自动化执行。

相关推荐
00后程序员张5 小时前
对比 Ipa Guard 与 Swift Shield 在 iOS 应用安全处理中的使用差异
android·开发语言·ios·小程序·uni-app·iphone·swift
北辰当尹7 小时前
【小迪安全2023】day42 php应用&mysql架构&sql注入&跨库查询&文件读写&权限操作
mysql·安全·php
乐迪信息7 小时前
乐迪信息:AI算法盒子+船舶AI逆行检测算法,船舶违规实时抓拍
大数据·运维·人工智能·物联网·安全
Coder个人博客7 小时前
Linux6.19-ARM64 mm mem_encrypt子模块深入分析
linux·安全·车载系统·系统架构·系统安全·鸿蒙系统·安全架构
悠哉清闲7 小时前
不同车型drawable不同
android·开发语言
上海云盾-小余8 小时前
Edge SCDN是如何实现智能 WAF 防护的?
前端·网络·安全·edge
2401_836235868 小时前
通关利器:中安未来TH-ER610电子护照阅读器,无纸化时代的身份核验安全保障
人工智能·科技·深度学习·安全·ocr
乐迪信息10 小时前
乐迪信息:船舶AI倾斜监测算法:实时预警,智能分析平台
大数据·网络·人工智能·算法·安全
00后程序员张10 小时前
在 iOS 设备上同时监控 CPU、GPU 与内存的方法
android·ios·小程序·https·uni-app·iphone·webview
测试_AI_一辰10 小时前
项目实践笔记 9:打卡/日报Agent项目Bug 修改与稳定性收口(v1.0)
android·开发语言·人工智能·功能测试·ai编程·ab测试