全部文章

SSH 配置与使用

SSH 密钥管理、多账号配置、端口转发与远程连接技巧

目录 21 节

SSH 配置与使用

SSH 真正好用的关键,不是会一条 ssh user@host,而是把密钥、别名、转发和连接习惯一次性整理好。这样你后续接 Git、服务器、隧道、远程数据库时都会轻松很多。

推荐配置顺序

  1. 先生成一套主密钥
  2. 配置 ~/.ssh/config,给常用主机起别名
  3. 打通免密登录
  4. 再根据需要加端口转发、代理跳板和保活设置

为什么推荐先写 config

  • 少记 IP、端口和用户名
  • 方便多账号、多环境切换
  • Git、SSH、端口转发都能复用同一套配置
  • 后续排障时更容易看出到底连的是哪台机器

生成密钥

# Ed25519(推荐)
ssh-keygen -t ed25519 -C "[email]"

# RSA(兼容性更好)
ssh-keygen -t rsa -b 4096 -C "[email]"

默认保存在 ~/.ssh/id_ed25519(私钥)和 ~/.ssh/id_ed25519.pub(公钥)。

查看公钥:

cat ~/.ssh/id_ed25519.pub

优先推荐 ed25519,除非你确实遇到老旧系统兼容问题。

多账号配置

编辑 ~/.ssh/config

# GitHub 个人账号
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519

# GitHub 工作账号
Host github-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_work

# 自定义服务器
Host myserver
    HostName 192.168.1.100
    User root
    Port 22
    IdentityFile ~/.ssh/id_server

使用工作账号克隆:

git clone git@github-work:org/repo.git

多账号场景里,最常见的问题就是“看起来能连,实际推错仓库或用了错身份”。别名和独立密钥能很好地避免这类混乱。

连接服务器

# 基本连接
ssh user@hostname

# 指定端口
ssh -p 2222 user@hostname

# 使用配置别名
ssh myserver

如果你经常连同一批机器,别再手敲长命令,统一走别名收益非常高。

端口转发

本地转发

将远程端口映射到本地:

# 将远程 3306(MySQL)映射到本地 3306
ssh -L 3306:localhost:3306 user@server

# 后台运行
ssh -fNL 3306:localhost:3306 user@server

远程转发

将本地端口暴露到远程:

# 将本地 3000 暴露到远程 8080
ssh -R 8080:localhost:3000 user@server

动态转发(SOCKS 代理)

ssh -D 1080 user@server

常见使用场景

远程数据库调试

  • 用本地转发把远端 MySQL / PostgreSQL 映射到本地
  • 本地工具连接 localhost,避免数据库直接暴露公网

临时访问内网站点

  • 用本地转发把远端后台面板映射到本地浏览器
  • 比直接开放公网端口更安全

跳板机 / 堡垒机场景

  • 可以在 config 中继续加 ProxyJump
  • 多台主机串联时,配置文件的价值会明显放大

免密登录

# 将公钥复制到服务器
ssh-copy-id user@hostname

# 手动方式
cat ~/.ssh/id_ed25519.pub | ssh user@hostname "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

生产机建议同时关闭密码登录或至少降低密码登录依赖,不要“有密钥还长期保留弱密码”。

保持连接

~/.ssh/config 中添加:

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3
    TCPKeepAlive yes

长时间跑命令、日志跟踪、数据库代理和不稳定网络环境里,这组参数特别有价值。

Windows SSH Agent

# 启动 SSH Agent 服务
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent

# 添加密钥
ssh-add ~/.ssh/id_ed25519

# 查看已添加的密钥
ssh-add -l

常见问题

Permission denied (publickey)

  • 先确认公钥是否真的写进目标服务器
  • 检查 IdentityFile 是否指向正确私钥
  • 再看服务器端 .ssh 目录和 authorized_keys 权限是否正常

GitHub 能 clone,不能 push

大多是账号、仓库权限或远程地址写错,不一定是 SSH 本身坏了。先用 ssh -T git@github.com 验证当前身份。

连接很慢或经常断

  • 先看网络本身是否稳定
  • 再加 ServerAliveInterval
  • 如果跨境或经由跳板机,确认 DNS、代理和路径是否绕远

参考链接

阅读建议
  • - 先读标题和摘要,再结合目录决定从哪个章节开始精读。
  • - 看到具体命令、配置或步骤时,尽量在自己的环境里同步验证。
  • - 如果你只是快速查资料,可先看目录和相关文档,再决定是否深入全文。
适合谁看
  • - 希望把零散经验整理成长期可复用工作流的人
  • - 想先建立认知,再决定是否深入实践的人
  • - 希望阅读时顺手建立自己的操作清单或收藏体系的人
执行前检查
  • - 先浏览标题、摘要和目录,带着问题阅读会更高效
  • - 顺手记录真正对你有用的命令、链接和注意事项,避免重复搜索
  • - 如果页面里提到相关文档,尽量一起打开对照,效果通常更完整
同类内容
← 上一篇Shell 脚本入门