SSH(Secure Shell)是一种加密的网络协议,用于在不安全的网络中安全地访问和管理远程计算机。 # 主要用途 **1. 远程登录** ```bash # 基本连接 ssh username@hostname # 指定端口 ssh -p 2222 username@hostname # 使用密钥 ssh -i ~/.ssh/id_rsa username@hostname ``` **2. 文件传输** ```bash # 使用 scp 复制文件 scp local_file.txt user@remote:/path/to/destination scp user@remote:/path/to/file.txt ./local_directory # 使用 sftp 交互式传输 sftp user@remote ``` **3. 端口转发(隧道)** ```bash # 本地端口转发 ssh -L 8080:localhost:80 user@remote # 远程端口转发 ssh -R 9090:localhost:3000 user@remote ``` # 工作原理 1. **建立连接**:客户端连接到服务器的 SSH 端口(默认22) 2. **协商加密**:双方协商使用的加密算法 3. **服务器认证**:客户端验证服务器身份(通过主机密钥) 4. **用户认证**:用户通过密码或密钥认证 5. **安全通信**:所有数据都经过加密传输 # 认证方式 **密码认证**: - 简单但相对不够安全 - 容易受到暴力破解攻击 **密钥认证**: ```bash # 生成密钥对 ssh-keygen -t rsa -b 4096 # 复制公钥到服务器 ssh-copy-id user@remote ``` # 配置文件 **~/.ssh/config** 示例: ```Java Host myserver HostName 192.168.1.100 User admin Port 2222 IdentityFile ~/.ssh/myserver_key Host github HostName github.com User git IdentityFile ~/.ssh/github_key ``` 使用配置后可以简化连接: ```bash ssh myserver # 相当于 ssh -p 2222 -i ~/.ssh/myserver_key [email protected] ``` # 常用选项 - `-v`:显示详细调试信息 - `-X`:启用 X11 转发(图形界面) - `-N`:不执行远程命令(仅用于端口转发) - `-f`:后台运行 - `-C`:压缩数据传输 # 安全建议 1. **禁用密码登录**:只使用密钥认证 2. **更改默认端口**:避免自动化攻击 3. **限制用户访问**:使用 AllowUsers 或 AllowGroups 4. **使用强密钥**:至少 2048 位 RSA 或 Ed25519 5. **定期更新**:保持 SSH 软件最新 6. **使用 fail2ban**:防止暴力破解 # 实际应用场景 - **服务器管理**:远程管理 Linux 服务器 - **Git 操作**:通过 SSH 推送代码到 GitHub/GitLab - **数据库隧道**:安全访问远程数据库 - **自动化部署**:CI/CD 流程中的自动部署 - **跳板机**:通过堡垒机访问内网服务器 SSH 是系统管理员和开发人员的必备工具,它提供了安全、灵活的远程访问方案。