本页目录
SSH 操作手册
连接与配置
~/.ssh/config 是 SSH 最重要的配置文件,每个 Host block 定义一组连接参数:
Host myserver
HostName 1.2.3.4 # 实际 IP 或域名
Port 2222 # 默认 22
User root # 登录用户
IdentityFile ~/.ssh/id_ed25519 # 私钥路径
ServerAliveInterval 60 # 每 60s 发 keepalive (防止 NAT/防火墙断连接)
ServerAliveCountMax 3 # 连续 3 次失败才断开
# 免密已配好 → ssh myserver 直接登录
Host github.com
HostName github.com
IdentityFile ~/.ssh/id_ed25519_github # 多 key 时指定不同 key
IdentitiesOnly yes # 只用这个 key, 不尝试 agent 中的其他 key
Host jump-*
ProxyJump jumphost # 通过跳板机连接
Key Management
# 生成 ED25519 key (推荐, 比 RSA 更快更安全)
# 放公钥到远程 (password → key 免密)
# 等效于: cat ~/.ssh/id_ed25519.pub | ssh user@host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
# 列出 agent 中的 key
# 删除 known_hosts 中的旧 key (重装系统后)
端口转发
# 本地转发: 访问 localhost:8080 = 访问 remote 能访问的 internal:80
# 适用: 远程内网的服务 (如数据库) 映射到本地端口
# 远程转发: 访问 remote:3000 = 访问 localhost:22
# 适用: 把本机 SSH 暴露给外网 (homessh 的原理)
# 注意: 默认只 bind remote 的 localhost, 需要 GatewayPorts yes 才能 bind 0.0.0.0
# 动态转发 (SOCKS5 proxy): 浏览器设置 proxy 为 localhost:1080
# 适用: 通过 SSH 服务器做代理 (比 HTTP CONNECT 通用)
文件传输
# rsync 支持增量传输和续传
# -a: archive (保留权限/时间/符号链接)
# -v: verbose
# -z: 压缩
# --progress: 显示进度
# 注意: dir/ (带斜杠) = 传输目录内容, dir (不带) = 传输目录本身
故障排查
# 详细调试输出 (看 key exchange, auth 过程, 问题在哪一步)
# Permission denied (publickey)
# → 检查本地 key 是否被私钥加了密码忘了 unlock
# → 检查远程 ~/.ssh/authorized_keys 是否包含正确的公钥
# → 检查远程 ~/.ssh 权限: chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys
# → 检查远程 /etc/ssh/sshd_config: PubkeyAuthentication yes
# Connection refused
# → 远程 sshd 在跑吗? systemctl status sshd
# → 远程防火墙放行了吗? iptables -L -n -v | grep 22
# Host key verification failed (重装系统后)
# 连接建立后卡住 (可能 DNS 反向解析慢)
# → 在远程 /etc/ssh/sshd_config 设: UseDNS no