SSH秘钥管理指南

SSH秘钥管理指南

    • [1. 生成 SSH 密钥对(Windows/Linux/macOS)](#1. 生成 SSH 密钥对(Windows/Linux/macOS))
      • [1.1 生成 RSA 密钥对(建议)](#1.1 生成 RSA 密钥对(建议))
      • [1.2 可选:生成 Ed25519 密钥(更安全)](#1.2 可选:生成 Ed25519 密钥(更安全))
    • [2. 配置 SSH 免密登录 Linux 服务器](#2. 配置 SSH 免密登录 Linux 服务器)
      • [2.1 将公钥上传到 Linux 服务器](#2.1 将公钥上传到 Linux 服务器)
        • [方法 1:使用 `ssh-copy-id`(推荐)](#方法 1:使用 ssh-copy-id(推荐))
        • [方法 2:手动复制(适用于 Windows)](#方法 2:手动复制(适用于 Windows))
      • [2.2 测试 SSH 登录](#2.2 测试 SSH 登录)
      • [2.3 可选:禁用密码登录(增强安全)](#2.3 可选:禁用密码登录(增强安全))
    • [3. 使用 SSH 密钥连接 GitHub](#3. 使用 SSH 密钥连接 GitHub)
      • [3.1 添加公钥到 GitHub](#3.1 添加公钥到 GitHub)
      • [3.2 测试 GitHub 连接](#3.2 测试 GitHub 连接)
      • [3.3 使用 SSH 克隆仓库](#3.3 使用 SSH 克隆仓库)
    • [4. 高级配置(可选)](#4. 高级配置(可选))
      • [4.1 管理多个 SSH 密钥](#4.1 管理多个 SSH 密钥)
      • [4.2 密钥加密(增加密码保护)](#4.2 密钥加密(增加密码保护))
    • [5. 常见问题排查](#5. 常见问题排查)
      • [5.1 权限问题](#5.1 权限问题)
      • [5.2 连接失败](#5.2 连接失败)
      • [5.3 GitHub 认证失败](#5.3 GitHub 认证失败)
    • [6. 总结](#6. 总结)

------本地生成密钥对、访问 Linux 服务器及 GitHub


1. 生成 SSH 密钥对(Windows/Linux/macOS)

1.1 生成 RSA 密钥对(建议)

bash 复制代码
ssh-keygen -t rsa -C "your_email@example.com"
  • -t rsa:指定密钥类型为 RSA。
  • -C "your_email@example.com":注释(可选,用于标识密钥)。

执行后:

  1. 默认保存路径:
    • Windows: C:\Users\<用户名>\.ssh\id_rsa
    • Linux/macOS: ~/.ssh/id_rsa
  2. 建议不设置密码(直接回车两次),否则每次使用 SSH 需输入密码。

1.2 可选:生成 Ed25519 密钥(更安全)

bash 复制代码
ssh-keygen -t ed25519 -C "your_email@example.com"
  • Ed25519 比 RSA 更安全且更快,但部分旧系统可能不支持。

2. 配置 SSH 免密登录 Linux 服务器

2.1 将公钥上传到 Linux 服务器

方法 1:使用 ssh-copy-id(推荐)

username:对应远程服务器的用户。

server_ip:对应远程服务器的IP地址。

bash 复制代码
ssh-copy-id -i ~/.ssh/id_rsa.pub username@server_ip

输入服务器密码后,公钥会自动添加到 ~/.ssh/authorized_keys

方法 2:手动复制(适用于 Windows)
  1. 查看公钥

    bash 复制代码
    cat ~/.ssh/id_rsa.pub
  2. 登录服务器 ,将公钥追加到 authorized_keys

    bash 复制代码
    mkdir -p ~/.ssh
    echo "粘贴你的公钥" >> ~/.ssh/authorized_keys
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys

2.2 测试 SSH 登录

username:对应远程服务器的用户。

server_ip:对应远程服务器的IP地址。

shell 复制代码
ssh username@server_ip

如果服务器使用的不是22端口,则可以使用 -p 端口

bash 复制代码
ssh username@server_ip -p 10010

如果配置正确,应直接登录,无需密码。


2.3 可选:禁用密码登录(增强安全)

编辑 /etc/ssh/sshd_config

bash 复制代码
sudo nano /etc/ssh/sshd_config

修改:

ini 复制代码
PasswordAuthentication no
PubkeyAuthentication yes

重启 SSH 服务:

bash 复制代码
sudo systemctl restart sshd

3. 使用 SSH 密钥连接 GitHub

3.1 添加公钥到 GitHub

  1. 复制公钥

    bash 复制代码
    cat ~/.ssh/id_rsa.pub
  2. 登录 GitHub → Settings → SSH and GPG keys → New SSH key

    • Title : 自定义名称(如 My Laptop
    • Key : 粘贴 id_rsa.pub 内容

3.2 测试 GitHub 连接

bash 复制代码
ssh -T git@github.com

成功会显示:

复制代码
Hi username! You've successfully authenticated...

3.3 使用 SSH 克隆仓库

bash 复制代码
git clone git@github.com:username/repo.git

(替换 HTTPS 方式,避免每次输入密码)


4. 高级配置(可选)

4.1 管理多个 SSH 密钥

编辑 ~/.ssh/config

ini 复制代码
# GitHub
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_github

# 公司服务器
Host company-server
    HostName server_ip
    User deploy
    IdentityFile ~/.ssh/id_rsa_company
  • 使用方式

    bash 复制代码
    ssh company-server  # 代替 ssh deploy@server_ip
    git clone git@github.com:user/repo.git  # 自动使用指定密钥

4.2 密钥加密(增加密码保护)

生成密钥时设置密码:

bash 复制代码
ssh-keygen -t rsa -C "your_email@example.com"

后续可使用 ssh-add 缓存密码(临时免输入):

bash 复制代码
eval $(ssh-agent)  # 启动 agent
ssh-add ~/.ssh/id_rsa  # 添加密钥(需输入密码)

5. 常见问题排查

5.1 权限问题

  • .ssh 目录权限必须为 700

    bash 复制代码
    chmod 700 ~/.ssh
  • authorized_keys 权限必须为 600

    bash 复制代码
    chmod 600 ~/.ssh/authorized_keys

5.2 连接失败

  • 检查 SSH 服务状态

    bash 复制代码
    sudo systemctl status sshd
  • 查看详细错误

    bash 复制代码
    ssh -v username@server_ip

5.3 GitHub 认证失败

  • 确认公钥已正确添加

  • 测试连接

    bash 复制代码
    ssh -T git@github.com

6. 总结

场景 操作
生成密钥对 ssh-keygen -t rsa -b 4096
上传公钥到服务器 ssh-copy-id 或手动复制
GitHub SSH 连接 添加公钥到 GitHub → 测试 ssh -T
多密钥管理 配置 ~/.ssh/config
增强安全性 禁用密码登录 + 使用 Ed25519

通过 SSH 密钥认证,可实现:

  • 免密登录 Linux 服务器
  • 安全访问 Git Hub
  • 避免密码泄露风险

建议定期更换密钥(如每年一次),并妥善保管私钥!

相关推荐
乘云数字DATABUFF2 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
Web3探索者3 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh
荣--3 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森3 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜4 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB5 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode7 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220707 天前
如何搭建本地yum源(上)
运维
大树8810 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠10 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql