Linux SSH 服务一键配置脚本使用指南 🚀
本文详细介绍一个高效管理 SSH 服务的 Bash 脚本:setup-ssh.sh
(SSH 服务端配置脚本)。
✅ 支持主流 Linux 发行版:Debian, Ubuntu, CentOS, RHEL, Fedora, OpenSUSE, Arch Linux。
📖 导航目录
📌 脚本概述
SSH(Secure Shell)是用于安全远程登录和执行命令的网络协议,是管理 Linux 服务器的标准工具。下面介绍的脚本极大简化了 SSH 服务的配置和管理流程。✨
🔧 功能特点
此脚本用于自动化安装和配置 SSH 服务器,优化连接参数并设置防火墙规则,特别适合快速部署和批量配置场景。🎯
- ✅ 自动检测系统包管理器(APT/YUM/DNF/ZYPPER/PACMAN)并安装 SSH 服务
- ✅ 支持主流 Linux 发行版:Debian, Ubuntu, CentOS, RHEL, Fedora, OpenSUSE, Arch Linux
- ✅ 优化 SSH 连接参数(禁用 DNS 查询,启用压缩,保持连接等)
- ✅ 自动配置防火墙允许 SSH 连接(支持 ufw, firewalld, iptables)
- ✅ 备份原始配置文件,确保操作安全可逆
- ✅ 提供清晰的连接信息和安全建议
- ✅ 完整的错误处理和日志记录功能
一、 🚀脚本使用方法
1. 安装基础软件
1
|
apt update -y && apt install -y rsync sudo curl wget vim tree samba nfs-common openssh-server zip htop net-tools
|
2. 一键配置脚本
1
2
3
4
5
6
7
8
9
10
|
# Vercel 仓库
bash <(curl -sL script.meimolihan.eu.org/sh/ssh/setup-ssh.sh)
# Gitee 仓库
bash <(curl -sL gitee.com/meimolihan/script/raw/master/sh/ssh/setup-ssh.sh)
# 或者先下载再执行
wget -c https://gitee.com/meimolihan/script/raw/master/sh/ssh/setup-ssh.sh
chmod +x setup-ssh.sh
sudo ./setup-ssh.sh
|
3. 查看修改
1
|
grep -E 'Port 22|PermitRootLogin|GSSAPIAuthentication|UseDNS|Compression|ClientAliveInterval|ClientAliveCountMax|TCPKeepAlive' /etc/ssh/sshd_config
|
命令片段 |
一句话解释 |
# the setting of “PermitRootLogin prohibit-password |
删除那行纯注释提示。 |
Port 22 |
强制监听 22 端口。 |
PermitRootLogin yes |
允许 root 直接密码/密钥登录。 |
GSSAPIAuthentication no |
关闭 GSSAPI,加快连接速度。 |
UseDNS no |
禁用反向 DNS,防止登录卡慢。 |
Compression yes |
开启 SSH 层压缩,节省带宽。 |
ClientAliveInterval 30 |
每 30 秒服务端发一次心跳。 |
ClientAliveCountMax 86400 |
连续 86400 次无响应才断开≈30 天。 |
TCPKeepAlive no |
仅用 SSH 层心跳,避免伪造 RST 导致误断。 |
4. 公钥认证开关和公钥文件路径(选做)
1
2
|
sed -i 's/^#*PubkeyAuthentication.*/PubkeyAuthentication yes/' /etc/ssh/sshd_config
sed -i 's/^#*AuthorizedKeysFile.*/AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2/' /etc/ssh/sshd_config
|
二、🛠️ 补充 SSH 相关命令
除了使用脚本外,掌握以下 SSH 命令将帮助您更灵活地管理远程连接。📚
📊 服务器端管理命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# 查看 SSH 服务状态
sudo systemctl status ssh
sudo systemctl status sshd
# 启动/停止/重启 SSH 服务
sudo systemctl start ssh
sudo systemctl stop ssh
sudo systemctl restart ssh
# 重新加载 SSH 配置(不中断现有连接)
sudo systemctl reload ssh
# 查看 SSH 连接日志
sudo tail -f /var/log/auth.log | grep ssh
sudo journalctl -u ssh -f
# 查看当前连接的 SSH 用户
who
w
ps aux | grep sshd
# 查看 SSH 配置文件语法
sshd -t
# 生成 SSH 主机密钥
sudo ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
sudo ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
sudo ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
|
💻 客户端连接命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
# 基本连接
ssh username@hostname
# 指定端口连接
ssh -p 2222 username@hostname
# 使用特定私钥连接
ssh -i ~/.ssh/mykey username@hostname
# 远程执行命令
ssh username@hostname "ls -la"
# 启用详细模式(调试用)
ssh -v username@hostname
# 启用压缩(慢速网络有用)
ssh -C username@hostname
# X11 转发(图形界面)
ssh -X username@hostname
# 端口转发(本地端口转发)
ssh -L 8080:localhost:80 username@hostname
# 端口转发(远程端口转发)
ssh -R 9090:localhost:90 username@hostname
# SOCKS 代理
ssh -D 1080 username@hostname
# 文件传输(SCP)
scp file.txt username@hostname:/path/to/destination
scp -r directory username@hostname:/path/to/destination
# 安全文件传输(SFTP)
sftp username@hostname
# 同步文件(RSYNC over SSH)
rsync -avz -e ssh /local/path username@hostname:/remote/path
|
🔍 故障排查命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
# 检查 SSH 端口是否开放
nc -zv hostname 22
nmap -p 22 hostname
# 测试连接(不执行命令)
ssh -T username@hostname
# 检查公钥指纹
ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
# 调试 SSH 客户端
ssh -vvv username@hostname
# 调试 SSH 服务器端(临时启用调试模式)
sudo /usr/sbin/sshd -d -p 2222
# 检查 SSH 配置语法
sudo sshd -t
# 查看失败的登录尝试
sudo grep "Failed password" /var/log/auth.log
sudo lastb
# 查看成功的登录记录
sudo last
|
三、🎯 SSH 使用示例
🔑 1. SSH 密钥认证配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 生成 SSH 密钥对(客户端)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
ssh-keygen -t ed25519 -C "your_email@example.com" # 更安全的选择
# 复制公钥到服务器
ssh-copy-id username@hostname
# 或者手动复制
cat ~/.ssh/id_rsa.pub | ssh username@hostname "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
# 设置正确的权限
ssh username@hostname "chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys"
# 禁用密码认证(服务器端)
# 编辑 /etc/ssh/sshd_config
# 设置 PasswordAuthentication no
# 然后重启 SSH 服务
|
🔄 2. SSH 端口转发和隧道
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# 本地端口转发(访问远程服务的本地端口)
ssh -L 3306:localhost:3306 username@hostname # MySQL 隧道
ssh -L 8080:localhost:80 username@hostname # Web 服务器隧道
# 远程端口转发(让远程访问本地服务)
ssh -R 9090:localhost:3000 username@hostname # 本地开发服务器
# 动态端口转发(SOCKS 代理)
ssh -D 1080 username@hostname
# 多跳 SSH 连接(通过跳板机)
ssh -J jumpuser@jumpserver username@targetserver
# 保持连接活跃(客户端配置)
# 在 ~/.ssh/config 中添加:
# Host *
# ServerAliveInterval 60
# ServerAliveCountMax 3
|
四、❓ 常见问题解决
-
连接被拒绝或超时 🤔
- 检查 SSH 服务是否运行:
sudo systemctl status ssh
- 确认防火墙允许 SSH 端口:
sudo ufw status
或 sudo firewall-cmd --list-all
- 验证网络连通性:
ping hostname
和 telnet hostname 22
-
权限错误 🔐
- 检查
~/.ssh
目录权限:应为 700
- 检查
~/.ssh/authorized_keys
文件权限:应为 600
- 确认 SELinux 或 AppArmor 没有阻止访问
-
主机密钥验证失败 ⚠️
- 清除过期的密钥:
ssh-keygen -R hostname
- 或者编辑
~/.ssh/known_hosts
手动删除对应行
-
认证失败 🔑
- 确认服务器是否允许密码认证:
PasswordAuthentication yes
- 检查密钥是否正确复制到
authorized_keys
- 验证服务器是否允许该用户登录:
AllowUsers
设置
-
连接速度慢 🐢
- 禁用 DNS 反向查询:在
sshd_config
设置 UseDNS no
- 尝试使用更快的加密算法:
Ciphers aes128-gcm@openssh.com
- 启用压缩:
Compression yes
五、🔒 SSH 安全建议
-
使用非标准端口 🚪
- 修改默认 SSH 端口(22)为其他端口
- 在
/etc/ssh/sshd_config
中设置:Port 2222
-
禁用 root 直接登录 👤
- 禁止 root 用户直接 SSH 登录:
PermitRootLogin no
- 使用普通用户登录后切换 root
-
使用密钥认证 🔑
- 完全禁用密码认证:
PasswordAuthentication no
- 强制使用公钥认证:
PubkeyAuthentication yes
-
限制用户访问 📋
- 只允许特定用户访问:
AllowUsers user1 user2
- 或限制用户组:
AllowGroups ssh-users
-
使用 fail2ban 防止暴力破解 🛡️
1
2
3
4
5
6
7
8
9
|
# 安装 fail2ban
sudo apt install fail2ban
# 配置 SSH 保护
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# 在 [sshd] 部分设置:
# enabled = true
# port = ssh
# logpath = /var/log/auth.log
|
-
定期更新 SSH 🔄
- 保持 SSH 软件最新:
sudo apt update && sudo apt upgrade openssh-server
- 关注 SSH 安全公告,及时应对漏洞
-
使用双因素认证 ✅
- 结合 Google Authenticator 等工具增强安全性
- 配置 SSH 与 PAM 集成实现双因素认证
六、📝 总结
通过本文介绍的脚本和一系列 SSH 管理命令,您可以轻松实现以下目标:🎯
- 快速部署:使用
setup-ssh.sh
在几分钟内完成 SSH 服务器配置和优化
- 安全连接:掌握密钥认证、端口转发等高级 SSH 功能
- 灵活管理:使用各种 SSH 命令应对不同管理场景和需求
- 故障排除:使用专业工具诊断和解决连接、认证等问题
- 安全保障:实施最佳实践,确保远程访问服务的安全性
无论是单台服务器的日常管理,还是大规模集群的远程维护,SSH 都是不可或缺的核心工具。这个脚本和相关命令将帮助您更高效地使用这一工具,提升工作效率和系统安全性。💼
建议收藏本文作为 SSH 管理的参考手册,随时查阅相关命令和技巧。如有任何问题或建议,欢迎留言讨论!💬