SSH(OpenSSH)
SSH(Secure Shell)是一种加密网络协议,用于在不安全的网络中安全地远程登录和执行命令。OpenSSH 是最广泛使用的开源实现。
速查卡片
| 项目 | 内容 |
|---|---|
| 远程登录 | ssh user@host |
| 指定端口 | ssh -p 2222 user@host |
| 指定密钥 | ssh -i ~/.ssh/id_ed25519 user@host |
| 生成密钥 | ssh-keygen -t ed25519 -C "comment" |
| 分发公钥 | ssh-copy-id user@host |
| 拷贝文件 | scp file.txt user@host:/path/ |
| 递归拷贝 | scp -r dir/ user@host:/path/ |
| 本地端口转发 | ssh -L 8080:localhost:80 user@host |
| 远程端口转发 | ssh -R 9090:localhost:3000 user@host |
| 动态转发(SOCKS) | ssh -D 1080 user@host |
| 跳板机 | ssh -J jump@host target@internal |
| 客户端配置 | ~/.ssh/config |
| 服务端配置 | /etc/ssh/sshd_config |
| 调试连接 | ssh -vvv user@host |
| 测试配置 | ssh -G host |
概述
SSH 协议
SSH(Secure Shell)协议在两个不可信主机之间建立加密的安全通道,实现:
- 远程登录:安全取代 telnet / rlogin
- 命令执行:非交互式远程执行命令
- 文件传输:通过 SCP / SFTP 安全拷贝文件
- 端口转发:加密隧道代理 TCP 流量
- X11 转发:安全运行远程图形程序
SSH 协议采用客户端-服务器架构,默认使用 TCP 22 端口。目前主流使用 SSH 协议版本 2(SSH-2),版本 1 因安全漏洞已被废弃。
OpenSSH 生态
OpenSSH 是 SSH 协议最广泛使用的开源实现,包含以下命令行工具:
| 命令 | 用途 |
|---|---|
ssh | 远程登录客户端 |
scp | 安全文件拷贝 |
sftp | 交互式文件传输 |
ssh-keygen | 密钥生成与管理 |
ssh-copy-id | 公钥分发 |
ssh-agent | 密钥代理(缓存解密后的私钥) |
ssh-add | 向 ssh-agent 添加密钥 |
ssh-keyscan | 批量收集主机公钥 |
sshd | SSH 服务端守护进程 |
认证方式
SSH 支持多种认证方式,按默认尝试顺序:
- GSSAPI 认证(Kerberos)
- 基于主机的认证(host-based)
- 公钥认证(最推荐,安全且方便)
- 键盘交互式认证(keyboard-interactive)
- 密码认证(最简单但不推荐)
知识体系导航
SSH 知识体系按功能域划分为以下模块:
| 领域 | 文档 | 核心内容 |
|---|---|---|
| 核心命令 | ssh 客户端命令 | ssh 全部选项、远程执行、ControlMaster、X11 转发 |
| 密钥管理 | 密钥管理 | ssh-keygen、ssh-copy-id、ssh-agent、authorized_keys |
| 文件传输 | 文件传输 | scp、sftp、rsync over SSH |
| 高级隧道 | 端口转发与隧道 | -L/-R/-D、ProxyJump、ProxyCommand、sshuttle |
| 配置与安全 | 配置与安全加固 | ~/.ssh/config、sshd_config、安全最佳实践、排错 |
快速上手
第一次连接
bash
# 1. 生成密钥对(推荐 Ed25519)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 2. 将公钥分发到远程主机
ssh-copy-id user@remote-host
# 3. 免密登录
ssh user@remote-host常用连接模式
bash
# 基础登录
ssh user@192.168.1.100
# 指定端口
ssh -p 2222 user@host
# 指定密钥
ssh -i ~/.ssh/my_key user@host
# 登录后执行命令
ssh user@host 'ls -la /var/log'
# 强制分配伪终端(运行交互式程序)
ssh -t user@host top创建客户端配置(免记忆长命令)
在 ~/.ssh/config 中添加:
Host myserver
HostName 192.168.1.100
User root
Port 2222
IdentityFile ~/.ssh/my_key之后只需 ssh myserver 即可连接。
版本与标准
- 当前版本:OpenSSH 通常在各大发行版中保持更新
- 协议版本:SSH Protocol 2(RFC 4250–4256)
- 密钥类型推荐:Ed25519(最佳安全/性能比)、ECDSA、RSA(≥3072 位)
来源
| 来源 | 链接 |
|---|---|
| OpenSSH 官方文档 | https://man.openbsd.org/ssh |
| SSH 协议 RFC | https://datatracker.ietf.org/doc/rfc4251/ |
| OpenSSH 项目主页 | https://www.openssh.com/ |
