# SSH 使用指南

## 什么是 SSH

SSH (Secure Shell) 是一种加密的网络协议，用于安全地远程登录和管理系统。它替代了不安全的 Telnet 和 rlogin 等协议。

## 基本用法

### 1. 连接到远程服务器

```bash
ssh username@hostname
```

示例：
```bash
ssh user@example.com
```

### 2. 指定端口连接（默认22）

```bash
ssh -p port_number username@hostname
```

示例：
```bash
ssh -p 2222 user@example.com
```

## 密钥认证

### 1. 生成 SSH 密钥对

```bash
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
```

- `-t` 指定密钥类型 (rsa, ed25519 等)
- `-b` 指定密钥长度
- `-C` 添加注释

### 2. 将公钥复制到远程服务器

```bash
ssh-copy-id username@hostname
```

或手动复制 `~/.ssh/id_rsa.pub` 内容到远程服务器的 `~/.ssh/authorized_keys` 文件中

## 配置文件

编辑 `~/.ssh/config` 可以简化连接：

```
Host myserver
    HostName example.com
    User username
    Port 2222
    IdentityFile ~/.ssh/id_rsa
```

配置后只需使用：
```bash
ssh myserver
```

## 常用选项

| 选项 | 说明 |
|------|------|
| `-v` | 详细模式 (可叠加 -vv, -vvv) |
| `-X` | 启用 X11 转发 |
| `-L` | 本地端口转发 |
| `-R` | 远程端口转发 |
| `-D` | 动态端口转发 (SOCKS 代理) |
| `-N` | 不执行远程命令 |
| `-f` | 后台运行 |

## 端口转发示例

### 1. 本地端口转发

```bash
ssh -L local_port:remote_host:remote_port username@hostname
```

### 2. 远程端口转发

```bash
ssh -R remote_port:local_host:local_port username@hostname
```

## 文件传输

### 1. 使用 scp 复制文件

从本地到远程：
```bash
scp local_file username@hostname:remote_path
```

从远程到本地：
```bash
scp username@hostname:remote_file local_path
```

### 2. 使用 sftp 交互式传输

```bash
sftp username@hostname
```

## 安全建议

1. 禁用 root 登录 (`PermitRootLogin no` in `/etc/ssh/sshd_config`)
2. 使用密钥认证而非密码
3. 更改默认 SSH 端口
4. 限制可登录用户 (`AllowUsers` in sshd_config)
5. 使用 fail2ban 防止暴力破解

## 故障排查

1. 检查服务状态：
```bash
systemctl status sshd
```

2. 检查日志：
```bash
journalctl -u sshd
```

3. 测试连接：
```bash
ssh -v username@hostname
```