SSH 服务器与客户端配置最佳实践
SSH 服务器与客户端配置最佳实践
目录
-
SSH 服务端设置
- 安装 SSH 服务器
- 配置 SSH 服务器(最佳实践)
- 启用密钥认证
- 防火墙配置
- 重启 SSH 服务
-
SSH 客户端设置
- 生成 SSH 密钥对(推荐 Ed25519)
- 上传公钥到服务器
- 配置 SSH 客户端(简化连接)
-
连接测试
- 使用密钥连接
- 验证配置
-
高级安全配置
- 更改默认端口
- 禁用密码登录
- 使用 Fail2Ban 防止暴力破解
- 限制用户访问
-
常见问题排查
- 连接失败
- 权限问题
- 防火墙问题
1. SSH 服务端设置
1.1 安装 SSH 服务器
Ubuntu/Debian 系统
sudo apt update
sudo apt install openssh-server
CentOS/RHEL 系统
sudo yum install openssh-server
Fedora 系统
sudo dnf install openssh-server
1.2 配置 SSH 服务器(最佳实践)
编辑 SSH 配置文件 /etc/ssh/sshd_config
:
sudo nano /etc/ssh/sshd_config
推荐配置(最佳实践)
Port 2222 # 更改默认端口,避免使用 22
PermitRootLogin no # 禁用 root 登录
PubkeyAuthentication yes # 启用公钥认证
PasswordAuthentication no # 禁用密码认证
AuthorizedKeysFile .ssh/authorized_keys # 指定公钥文件路径
ClientAliveInterval 300 # 设置空闲超时为 300 秒
ClientAliveCountMax 2 # 最多发送 2 次保活信号
AllowUsers username1 username2 # 仅允许特定用户登录
1.3 启用密钥认证
确保 ~/.ssh/authorized_keys
文件存在并包含客户端的公钥:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
1.4 防火墙配置
允许 SSH 流量通过防火墙。
Ubuntu/Debian 系统
sudo ufw allow 2222/tcp
sudo ufw enable
CentOS/RHEL/Fedora 系统
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload
1.5 重启 SSH 服务
Ubuntu/Debian 系统
sudo systemctl restart ssh
CentOS/RHEL/Fedora 系统
sudo systemctl restart sshd
2. SSH 客户端设置
2.1 生成 SSH 密钥对(推荐 Ed25519)
在客户端生成 SSH 密钥对(推荐使用 Ed25519 算法):
ssh-keygen -t ed25519 -C "your_email@example.com"
按提示选择保存路径和设置密码(可选)。
2.2 上传公钥到服务器
使用 ssh-copy-id
将公钥上传到服务器:
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@server_ip -p 2222
如果 ssh-copy-id
不可用,可以手动将公钥内容添加到服务器的 ~/.ssh/authorized_keys
文件中。
2.3 配置 SSH 客户端(简化连接)
编辑客户端的 SSH 配置文件 ~/.ssh/config
:
nano ~/.ssh/config
添加以下内容:
Host myserver
HostName server_ip
Port 2222
User username
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60 # 每 60 秒发送保活信号
StrictHostKeyChecking no # 首次连接时自动接受主机密钥(仅用于测试环境)
3. 连接测试
3.1 使用密钥连接
ssh myserver
3.2 验证配置
- 确保连接成功。
- 检查日志文件
/var/log/auth.log
(Ubuntu/Debian)或/var/log/secure
(CentOS/RHEL)以确认认证方式为公钥认证。
4. 高级安全配置
4.1 更改默认端口
- 避免使用默认的
22
端口,改为一个高位端口(如2222
)。 - 更新防火墙规则以允许新端口。
4.2 禁用密码登录
- 确保
/etc/ssh/sshd_config
中PasswordAuthentication
设置为no
。
4.3 使用 Fail2Ban 防止暴力破解
- 安装 Fail2Ban:
sudo apt install fail2ban
- 配置 Fail2Ban 监控 SSH 日志:
添加以下内容:sudo nano /etc/fail2ban/jail.local
[sshd] enabled = true port = 2222 filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 3600
4.4 限制用户访问
- 在
/etc/ssh/sshd_config
中使用AllowUsers
或AllowGroups
限制访问:AllowUsers username1 username2 AllowGroups sshusers
5. 常见问题排查
5.1 连接失败
- 检查服务器 IP 和端口是否正确。
- 确保 SSH 服务正在运行:
sudo systemctl status sshd
5.2 权限问题
- 确保
~/.ssh
目录权限为700
:chmod 700 ~/.ssh
- 确保
~/.ssh/authorized_keys
文件权限为600
:chmod 600 ~/.ssh/authorized_keys
5.3 防火墙问题
- 检查防火墙是否允许 SSH 端口:
或sudo ufw status
sudo firewall-cmd --list-ports
总结
通过以上最佳实践,您可以:
- 提高 SSH 连接的安全性。
- 简化客户端连接配置。
- 防止暴力破解和未授权访问。