Appearance
SSH 远程管理与安全加固指南
本文档旨在帮助你掌握 Linux 服务器远程管理的标准化操作流程。从基础的账号连接、免密登录,到多台服务器的快捷管理、文件传输,再到生产环境下的会话持久化与安全加固。
核心原则: 生产环境禁止使用密码登录,强制使用密钥登录;高危长耗时操作必须在持久化终端中执行。
1. 登录方式对比
| 方式 | 安全性 | 便捷性 | 适用场景 |
|---|---|---|---|
| 密码登录 | ⭐⭐ (易被暴力破解) | ⭐⭐ (需记忆/输入) | 初始设置、临时救援 |
| 密钥登录 | ⭐⭐⭐⭐⭐ (极高) | ⭐⭐⭐⭐⭐ (全自动) | 日常运维、自动化脚本 |
2. 免密密钥登录 (Recommended)
2.1 配置步骤 (Client 端操作)
通过非对称加密技术,将本地的“公钥”存放在服务器上,自己保留“私钥”。连接时自动匹配,无需输入密码。
Step 1: 生成密钥对
在本地电脑 (Windows/Mac) 终端执行:
powershell
# -t ed25519: 使用更安全高效的算法
ssh-keygen -t ed25519 -C "your_email@example.com"一路回车即可。生成的文件在 ~/.ssh/id_ed25519 (私钥) 和 ~/.ssh/id_ed25519.pub (公钥)。
Step 2: 上传公钥到服务器
将公钥内容追加到服务器的 ~/.ssh/authorized_keys 文件中。
方式 A: 自动命令 (Mac/Linux/Windows新版)
bash
ssh-copy-id -i ~/.ssh/id_ed25519.pub hongjy@192.168.1.200方式 B: 手动追加 (Windows PowerShell)
powershell
type ~/.ssh/id_ed25519.pub | ssh hongjy@192.168.1.200 "cat >> ~/.ssh/authorized_keys"Step 3: 验证登录
bash
ssh hongjy@192.168.1.200如果直接进入终端而未提示输入密码,即配置成功。
3. 多服务器快捷管理 (~/.ssh/config)
当需要管理多台服务器时,每次输入 ssh user@ip -p port 非常繁琐。可以通过配置本地的 ~/.ssh/config 文件来简化。
配置示例
在本地编辑 ~/.ssh/config (Windows 为 C:\Users\用户名\.ssh\config):
bash
# 生产环境 Web 服务器
Host prod-web
HostName 192.168.1.200
User hongjy
Port 2222
IdentityFile ~/.ssh/id_ed25519
# 测试环境 数据库
Host test-db
HostName 10.0.0.15
User root
Port 22使用效果
配置完成后,只需输入别名即可连接:
bash
ssh prod-web # 等同于 ssh -p 2222 -i ~/.ssh/id_ed25519 hongjy@192.168.1.2004. 图形化管理工具 (Xshell & WinSCP)
对于 Windows 用户,图形化工具能极大提升日常运维体验。
4.1 Xshell (专业终端模拟器)
- 优势:支持多标签页、屏幕拆分、多服务器同步输入(执行集群命令)。
- 密钥登录配置:
- 新建会话 -> 填写主机 IP 和端口。
- 左侧选择【用户身份验证】。
- 方法选择
Public Key。 - 浏览并导入本地的私钥文件 (
id_ed25519)。
4.2 WinSCP (图形化文件传输)
- 优势:双面板操作,像操作本地文件夹一样拖拽上传/下载服务器文件。
- 与 Xshell 联动:在 WinSCP 中配置 Xshell 路径后,可以直接在当前目录下唤起 Xshell 终端 (
Ctrl+P)。 - 高级技巧:支持内置的文本编辑器,可直接双击打开服务器上的
.json或.conf文件进行修改并实时保存。
5. 命令行文件传输 (scp & sftp)
如果不使用图形化工具,命令行依然是高效的传输方式。
5.1 scp (基础拷贝)
bash
# 从本地上传文件到服务器
scp ./appsettings.json prod-web:/data/app/
# 从服务器下载整个目录到本地
scp -r prod-web:/var/log/nginx ./local_logs/5.2 sftp (交互式传输)
适合需要浏览服务器目录后再决定下载什么的场景:
bash
sftp prod-web
sftp> cd /data/app
sftp> put local_file.txt # 上传
sftp> get remote_file.zip # 下载
sftp> exit # 退出6. 远程操作习惯:终端持久化 (tmux)
痛点:在执行数据库备份、大文件下载或环境编译等耗时任务时,如果网络波动导致 SSH 断开,任务会立即中断。 解决方案:使用 tmux 或 screen 进行会话持久化。
tmux 极简生存命令
bash
# 1. 新建一个名为 "backup" 的持久化会话
tmux new -s backup
# 2. 在里面执行你的耗时命令,比如:
tar -zcvf data.tar.gz /data/
# 3. 暂时离开 (Detatch):让命令在后台继续跑
# 依次按下:Ctrl + b,松开后再按 d
# 4. 重新连接 (Attach):当你重新连上 SSH 时,回到刚才的会话
tmux attach -t backup
# 5. 查看当前有哪些后台会话
tmux ls原则:任何预计执行时间超过 3 分钟的生产环境操作,都必须在 tmux 中执行。
7. SSH 服务端安全加固 (Server Side)
⚠️ 警告: 修改配置前请确保密钥登录已完全可用,否则会导致无法连接服务器!
7.1 修改配置文件
bash
sudo vim /etc/ssh/sshd_config7.2 关键配置项
bash
# 1. 禁用 Root 登录 (防止直接暴力破解 root)
PermitRootLogin no
# 2. 禁用密码验证 (强烈推荐 - 确保密钥可用后再开!)
PasswordAuthentication no
# 3. 启用公钥验证
PubkeyAuthentication yes
# 4. 修改默认端口 (可选,防基础端口扫描)
# Port 22227.3 重启服务生效
bash
sudo systemctl restart ssh8. 常见排障 (Troubleshooting)
Q1: 配置了密钥还是要输密码?
权限问题: 服务器端的
.ssh目录权限必须严格。bashchmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys配置问题: 检查
/etc/ssh/sshd_config中是否开启了PubkeyAuthentication yes。
Q2: 密钥丢失了怎么办?
- 物理救援: 通过云平台控制台 (VNC) 登录。
- 恢复密码: 在控制台修改
sshd_config,将PasswordAuthentication改回yes并重启服务。
Generated by Ark Gardener based on user workflow.
