SSH 操作指南
基本连接
| 命令 / 配置 | 说明 |
|---|---|
| ssh user@host | 以指定用户连接到远程主机 |
| ssh user@host -p 2222 | 连接到非默认端口的远程主机 |
| ssh -i ~/.ssh/key user@host | 使用指定私钥文件连接 |
| ssh -o StrictHostKeyChecking=no host | 首次连接跳过主机密钥确认 |
| ssh -v user@host | 调试模式连接,查看详细握手过程 |
| ssh host "cmd" | 在远程主机执行单条命令后退出 |
| ssh -X user@host | 启用 X11 转发,可在远程运行 GUI 程序 |
| ssh -t user@host "cmd" | 分配伪终端,用于在远程运行交互式命令 |
密钥管理
| 命令 / 配置 | 说明 |
|---|---|
| ssh-keygen -t ed25519 | 生成 Ed25519 密钥对(推荐) |
| ssh-keygen -t rsa -b 4096 | 生成 4096 位 RSA 密钥对 |
| ssh-keygen -t ed25519 -C "email" | 生成带注释的密钥(标识用途) |
| ssh-copy-id user@host | 将公钥复制到远程主机(免密登录) |
| ssh-copy-id -i ~/.ssh/key.pub user@host | 指定公钥文件复制到远程 |
| ssh-keygen -l -f ~/.ssh/id.pub | 查看公钥指纹 |
| ssh-keygen -p | 修改私钥的 passphrase |
| eval "$(ssh-agent)" && ssh-add | 启动 ssh-agent 并添加私钥 |
端口转发 / 隧道
| 命令 / 配置 | 说明 |
|---|---|
| ssh -L 8080:localhost:80 host | 本地端口转发:访问本地 8080 转发到远程 80 |
| ssh -L 8080:db:3306 host | 本地端口转发:通过跳板机访问远程数据库 |
| ssh -R 8080:localhost:80 host | 远程端口转发:让远程 8080 转发到本地 80 |
| ssh -D 1080 host | 动态端口转发:创建 SOCKS5 代理(端口 1080) |
| ssh -N -L 8080:db:3306 host | 仅做转发不执行远程 shell(后台隧道) |
| ssh -f -N -L 8080:db:3306 host | 将隧道放入后台运行 |
SCP 文件传输
| 命令 / 配置 | 说明 |
|---|---|
| scp file user@host:/path | 上传单个文件到远程主机 |
| scp -r dir/ user@host:/path | 递归上传整个目录 |
| scp user@host:/path/file . | 从远程主机下载文件 |
| scp -P 2222 file user@host:/path | 指定端口上传文件(大写 P) |
| scp -i key file user@host:/path | 使用指定密钥上传文件 |
| scp -C file user@host:/path | 传输时启用压缩 |
SSH 配置(~/.ssh/config)
| 命令 / 配置 | 说明 |
|---|---|
| Host alias\n HostName ip\n User user\n Port 22 | 为主机定义别名和连接参数 |
| Host *\n IdentityFile ~/.ssh/id_ed25519 | 全局默认使用指定密钥 |
| Host jump\n ProxyJump bastion | 通过跳板机连接目标主机 |
| ControlMaster auto\nControlPath ~/.ssh/%r@%h:%p | 启用连接复用,减少连接延迟 |
| ServerAliveInterval 60 | 每 60 秒发送心跳保活连接 |
| chmod 600 ~/.ssh/config | 设置配置文件权限(必须) |
安全建议
| 命令 / 配置 | 说明 |
|---|---|
| PasswordAuthentication no | 禁用密码登录,仅允许密钥认证 |
| PermitRootLogin no | 禁止 root 用户直接 SSH 登录 |
| Port 2222 | 修改默认 SSH 端口,减少被扫描风险 |
| AllowUsers user1 user2 | 仅允许指定用户 SSH 登录 |
| MaxAuthTries 3 | 限制最大认证尝试次数 |
| Fail2Ban | 使用 Fail2Ban 自动封禁多次失败登录的 IP |
| ssh-keygen -l -f /etc/ssh/ssh_host_* | 查看服务器主机密钥指纹 |
| ssh -o IdentitiesOnly=yes -i key host | 仅使用指定密钥,防止 agent 中其他密钥干扰 |
