OFFSET偏移
← 文章目录OFFSET / FIELD NOTESNO. 047

SSH 使用指南:命令行操作

生成与管理密钥,解析客户端配置并调试认证过程。

所在专题SSH 认证、agent 与命令行工作流 ↗
约 6 分钟阅读开始阅读

本文针对 OpenSSH 的常见客户端接口;可用选项以所安装版本的手册为准。用户配置通常在 ~/.ssh/。

ssh-keygen:生成与查看密钥#

# 生成 ed25519 密钥对(-t 类型 / -C 注释 / -f 输出路径)
ssh-keygen -t ed25519 -C "user@workstation" -f ~/.ssh/id_ed25519

# 查看公钥指纹(-l 指纹 / -E sha256 指定哈希 / -lf 对文件)
ssh-keygen -lf ~/.ssh/id_ed25519.pub

# 查看私钥对应的公钥(-y:读私钥输出公钥)
ssh-keygen -y -f ~/.ssh/id_ed25519

# 加 / 改 passphrase(-p;会先问旧密码,改/加用这个)
ssh-keygen -p -f ~/.ssh/id_ed25519

生成时的 passphrase 提示 生成新 key 时 ssh-keygen 会问 Enter passphrase——直接回车 = 无锁裸钥,输入 = 加锁。建议输入。

ssh-add:操作 agent 里的密钥#

ssh-add -l                        # 列出 agent 已加载的 key(含指纹)
ssh-add ~/.ssh/id_ed25519         # 把某个私钥加进 agent
ssh-add -d ~/.ssh/id_ed25519      # 移除某把
ssh-add -D                        # 清空 agent(全部移除)

先确认 SSH_AUTH_SOCK 指向可用 agent,再用 ssh-add -l 检查已加载密钥。桌面可能提供 gcr 等集成;自动加载不是所有会话的保证。

连接与调试#

# 测试 GitHub 连接(-T 禁止分配伪终端;GitHub 不提供 shell;正常返回 "Hi <用户>!")
ssh -T git@github.com

# 试解析配置(-G:显示某个 Host 生效的配置项,验证 config 写没写对)
ssh -G github.com

# 调试连接(-v 详细 / -vv 更详细,看认证过程)
ssh -v git@github.com

# 指定私钥连接(-i)
ssh -i ~/.ssh/id_ed25519 user@server.example.com

判断「加没加锁」的实测方法 ssh-keygen -y -f ~/.ssh/id_ed25519 —— 能直接输出公钥 = 裸钥;卡住要输密码 = 已加锁。

客户端配置:GitHub 与通用开发机#

~/.ssh/config:

windows 的 config 在 $HOME.ssh/config

Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes                # 限制为配置身份,而非 agent 中所有身份

Host dev-server
    HostName server.example.com       # 替换为已核对的服务器地址
    User user                         # 替换为远端账户

Host *
    IdentityFile ~/.ssh/id_ed25519    # 默认私钥;多个 IdentityFile 会累积
    AddKeysToAgent yes                # 已有 agent 时自动添加从文件加载的密钥
    ServerAliveInterval 60            # 协议保活;不保证网络永不掉线
    StrictHostKeyChecking ask         # 新主机先核对指纹再确认

日常流程:

# git push/pull(远端使用 GitHub SSH URL 时走相应 Host 配置)
git push origin main

# 通用开发机(先配置实际地址与账户并核对主机指纹)
ssh dev-server

config 权限 chmod 600 ~/.ssh/config 是常见保守设置,并非唯一允许值。用户配置必须遵守 OpenSSH 的所有者与写权限要求;不合规可能直接报错。对由声明式配置管理的文件,应在配置源中处理权限。

相关#

具体 Host 块放在通用默认块之前,因为多数配置项采用首先取得的值;IdentityFile 等允许多值的项会累积。GitHub 认证成功时会提示不提供 shell,并通常退出码为 1,因此不能仅凭非零退出码判为认证失败。首次连接先与官方指纹或可信控制台核对;主机密钥发生变化时,先查明原因,不要直接禁用校验。

参考与延伸

  1. OpenSSH ssh 手册 ↗
  2. OpenSSH ssh_config 手册 ↗
  3. OpenSSH ssh-keygen 手册 ↗
  4. GitHub SSH 连接测试 ↗

根据技术笔记重新整理,示例使用通用名称。

沿专题继续阅读

SSH 认证、agent 与命令行工作流

  1. 01SSH 认证体系:目录、密钥与 TOFU
  2. 02ssh-agent、passphrase 与 keyring
  3. 03SSH 使用指南:命令行操作
CONTINUE READING / 下一篇Fish:从键位到可编辑的命令行

保留 Emacs / Vi 键位、补全、缩写、PATH、事件与提示符配置。