跳到主要内容

SSH 命令速查表

SSH(Secure Shell)是远程服务器管理和安全通信的基石。本速查表覆盖了日常开发运维中最常用的 SSH 命令,从基础连接到高级隧道配置,每个命令都有实际使用示例。无论你是刚接触服务器管理还是需要快速查阅某个 SSH 技巧,这份速查表都能帮到你。

更新: 2026-07-16·37 条命令

使用场景速查

你要做什么用哪个命令
连接远程服务器ssh user@host
生成密钥对ssh-keygen -t ed25519
复制公钥到服务器ssh-copy-id user@host
上传文件到远程scp file user@host:/path/
同步目录到远程rsync -avz dir/ user@host:/path/
本地端口转发ssh -L 8080:localhost:80 user@host
SOCKS 代理ssh -D 1080 user@host
调试连接问题ssh -vvv user@host

远程连接

``bash # 基本连接 ssh user@example.com # 默认端口 22 连接 ssh -p 2222 user@host # 指定端口连接 ssh -i ~/.ssh/key.pem user@host # 使用指定私钥

# 跳板机/堡垒机 ssh -J user@bastion user@internal # 单跳板机 ssh -J user@jump1,user@jump2 user@target # 多级跳板

# 远程执行命令 ssh user@host 'df -h' # 执行单条命令 ssh -t user@host 'top' # 强制 TTY 运行交互式命令 ssh user@host 'bash -s' < script.sh # 在远程执行本地脚本

# 其他连接选项 ssh -N -L 8080:localhost:80 user@host # 仅建隧道,不登录 ssh -4 user@host # 强制使用 IPv4 ssh -6 user@host # 强制使用 IPv6 `

密钥管理

`bash # 生成密钥对 ssh-keygen -t ed25519 -C "you@email.com" # Ed25519(推荐) ssh-keygen -t rsa -b 4096 # RSA(兼容旧系统) ssh-keygen -t ed25519 -f ~/.ssh/custom_key # 自定义文件名

# 复制公钥到服务器 ssh-copy-id user@host # 自动追加到 ~/.ssh/authorized_keys ssh-copy-id -i ~/.ssh/custom_key.pub user@host # 复制指定公钥

# SSH Agent ssh-agent -s # 启动 agent ssh-add ~/.ssh/id_ed25519 # 添加私钥到 agent ssh-add -l # 列出 agent 中的密钥 ssh-add -D # 清空 agent 中所有密钥

# 获取主机公钥 ssh-keyscan github.com # 获取远程主机公钥 ssh-keyscan -t ed25519 example.com # 指定密钥类型获取

# 管理 known_hosts ssh-keygen -R example.com # 移除指定主机密钥 ssh-keygen -F example.com # 查找主机密钥

# 修改/查看密钥 ssh-keygen -p -f ~/.ssh/id_ed25519 # 修改密码短语 ssh-keygen -lf ~/.ssh/id_ed25519.pub # 查看公钥指纹 ssh-keygen -y -f ~/.ssh/id_ed25519 # 从私钥导出公钥 `

客户端配置

`bash # 在 ~/.ssh/config 中配置主机别名 # 位置:~/.ssh/config # 权限:chmod 600 ~/.ssh/config `

单主机配置示例:

` Host myserver HostName example.com User myuser Port 2222 IdentityFile ~/.ssh/id_ed25519 ServerAliveInterval 60 `

通配配置:

` Host *.internal.example.com User admin IdentityFile ~/.ssh/internal-key StrictHostKeyChecking no UserKnownHostsFile /dev/null

Host github.com HostName github.com User git IdentityFile ~/.ssh/github-key `

使用配置后,连接简化为 ssh myserver。也可用 ssh -F ~/.ssh/config-custom myserver 指定使用其他配置文件。

文件传输

`bash # SCP scp file.txt user@host:/path/ # 上传文件到远程 scp user@host:/path/file.txt . # 从远程下载文件 scp -r ./dist/ user@host:/var/www/ # 递归上传目录 scp -P 2222 file user@host:/path/ # 指定端口

# RSYNC(推荐用于大文件/目录同步) rsync -avz ./src/ user@host:/path/ # 增量同步到远程 rsync -avz --delete ./src/ user@host:/path/ # 包含删除操作(镜像同步) rsync -avz user@host:/path/ ./backup/ # 从远程同步到本地 rsync -avz -e "ssh -p 2222" ./ user@host:/ # 通过自定义端口

# SFTP sftp user@host # 交互式文件传输 sftp -oPort=2222 user@host # 指定端口连接 # 进入后可用:ls, cd, get, put, rm, mkdir 等 `

端口转发与隧道

`bash # 本地端口转发(将远程端口映射到本地) ssh -L 8080:localhost:80 user@host # 远程 80 → 本地 8080 ssh -L 3306:db-internal:3306 bastion # 通过跳板访问内网数据库 ssh -L 8080:localhost:80 -L 9090:localhost:90 # 同时转发多个端口

# 远程端口转发(将本地端口暴露到远程) ssh -R 8080:localhost:3000 user@host # 本地 3000 → 远程 8080 ssh -R 0.0.0.0:8080:localhost:3000 user@host # 允许外部访问远程端口

# SOCKS5 动态代理 ssh -D 1080 user@proxy # 本地 1080 作为 SOCKS 代理 # 浏览器设置 SOCKS 代理为 localhost:1080,所有流量经远程服务器

# 持久化隧道(使用 autossh,生产推荐) autossh -M 0 -o "ServerAliveInterval 30" \ -o "ServerAliveCountMax 3" \ -L 3306:localhost:3306 user@host # 自动重连的持久隧道 `

故障排查

`bash # 调试输出 ssh -v user@host # 详细模式(适合排查连接问题) ssh -vvv user@host # 极度详细模式(完整的调试输出) ssh -T git@github.com # 测试 SSH 连接但不登录

# 连接选项调试 ssh -o StrictHostKeyChecking=no user@host # ⚠️ 跳过主机密钥检查(仅测试环境) ssh -o UserKnownHostsFile=/dev/null user@host # 不使用 known_hosts ssh -o LogLevel=DEBUG user@host # 日志级别调整

# 网络测试 ssh -Q cipher # 查看支持的加密算法 ssh -Q mac # 查看支持的 MAC 算法 ssh -Q kex # 查看支持的密钥交换算法

# 服务端配置测试(需 root) sshd -T # 测试 sshd 配置是否正确 netstat -tlnp | grep :22 # 查看 SSH 服务监听状态

`

SSH 配置最佳实践

`bash # 安全加固建议(服务器端 /etc/ssh/sshd_config)

# 禁用 root 登录 PermitRootLogin no

# 仅允许密钥认证 PasswordAuthentication no PubkeyAuthentication yes

# 限制 SSH 协议版本 Protocol 2

# 指定允许的用户 AllowUsers alice bob

# 更改默认端口(降低扫描攻击) Port 2222

# 修改后重启服务 sudo systemctl restart sshd # 或 sudo service ssh restart ``

连接管理(7)

命令难度
ssh user@host
SSH 连接到远程服务器
基础
ssh -p <port>
指定端口连接(默认 22)
基础
ssh -i <keyfile>
使用指定私钥连接
基础
ssh -J <jumphost> <target>
通过跳板机连接目标服务器
中级
ssh -t <host> '<cmd>'
强制分配 TTY 并执行远程命令
中级
ssh -N -L <local>:<target>:<remote>
仅建立端口转发,不执行远程命令
中级
ssh -4 / ssh -6
强制使用 IPv4 / IPv6 连接
基础

密钥管理(8)

命令难度
ssh-keygen -t ed25519
生成 Ed25519 密钥对(推荐)
基础
ssh-keygen -t rsa -b 4096
生成 RSA 4096 位密钥对(兼容旧系统)
基础
ssh-copy-id user@host
将公钥复制到远程服务器
基础
ssh-add ~/.ssh/id_ed25519
将私钥添加到 SSH agent
基础
ssh-keygen -p
修改 SSH 密钥的密码短语
中级
ssh-keygen -R <hostname>
从 known_hosts 中移除主机密钥
基础
ssh-add -l
列出 SSH agent 中已加载的密钥
基础
ssh-keyscan <host>
获取远程主机的公钥(用于 CI/CD 配置)
中级

配置管理(2)

命令难度
~/.ssh/config
SSH 客户端配置文件
中级
ssh -F <config>
使用指定的配置文件
中级

文件传输(6)

命令难度
scp <file> user@host:<path>
复制文件到远程服务器
基础
scp user@host:<path> <local-dir>
从远程服务器复制文件到本地
基础
scp -r <dir> user@host:<path>
递归复制目录到远程
基础
rsync -avz <src> user@host:<dest>
增量同步本地目录到远程(推荐用于备份/部署)
中级
rsync -avz user@host:<src> <local-dest>
从远程服务器增量同步到本地
中级
sftp user@host
SFTP 交互式文件传输
基础

端口转发(4)

命令难度
ssh -L <local-port>:<target>:<target-port> <host>
本地端口转发(将远程端口映射到本地)
中级
ssh -R <remote-port>:<local>:<local-port> <host>
远程端口转发(将本地端口暴露到远程)
中级
ssh -D <local-port> <host>
SOCKS5 动态代理(本地端口做代理)
中级
autossh -M 0 -L ...
自动重连的持久化 SSH 隧道
高级

故障排查(10)

命令难度
ssh -v <host>
详细模式(查看连接过程)
基础
ssh -vvv <host>
极度详细模式(完整调试信息)
中级
ssh -o ServerAliveInterval=<seconds>
设置保活间隔,防止连接超时断开
中级
ssh -o StrictHostKeyChecking=no
跳过主机密钥检查(⚠️ 仅用于测试环境)
禁用主机密钥检查会降低安全性,可能遭受中间人攻击。仅用于临时测试环境。
中级
ssh -Q cipher
列出 SSH 客户端支持的加密算法
高级
ssh -Q mac
列出支持的 MAC 算法
高级
ssh -Q kex
列出支持的密钥交换算法
高级
ssh -T <host>
测试 SSH 连接(不分配终端)
中级
ssh -o UserKnownHostsFile=/dev/null
跳过 known_hosts 文件(⚠️ 仅测试环境)
跳过 known_hosts 验证会降低安全性,仅用于临时测试。
中级
sshd -T
测试 sshd 服务器配置是否正确
高级

常见问题

本速查表数据整理自各工具官方文档。最后更新: 2026-07-16。