SSH 服务配置详细教程
SSH(Secure Shell)是一个用于在网络上加密通信的协议,广泛用于远程登录和其他安全网络服务。在 CentOS 7 系统上,SSH 服务通常已经默认安装和启用,但根据需求,可能需要进一步配置以增强安全性和适应特定环境。以下是 SSH 服务的详细配置教程。
一、安装 SSH 服务
-
检查 SSH 服务是否已安装
- 通常,CentOS 7 默认会安装 OpenSSH 服务。可以使用以下命令检查:
rpm -qa | grep openssh
- 如果未安装,可以使用
yum
进行安装:yum install openssh-server openssh-clients -y
- 通常,CentOS 7 默认会安装 OpenSSH 服务。可以使用以下命令检查:
-
启动并启用 SSH 服务
- 启动 SSH 服务:
systemctl start sshd
- 设置开机自启:
systemctl enable sshd
- 启动 SSH 服务:
-
检查 SSH 服务状态
- 确认 SSH 服务是否在运行:
systemctl status sshd
- 确认 SSH 服务是否在运行:
二、基本配置
SSH 服务的主要配置文件是 /etc/ssh/sshd_config
。你可以根据需求修改配置文件,以调整 SSH 服务的行为。
-
备份配置文件
- 在修改之前,建议备份原始配置文件:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
- 在修改之前,建议备份原始配置文件:
-
修改配置文件
- 使用你喜欢的文本编辑器(如
vim
)打开/etc/ssh/sshd_config
文件:vim /etc/ssh/sshd_config
- 使用你喜欢的文本编辑器(如
-
常用配置选项
-
更改 SSH 端口
- 默认情况下,SSH 使用 22 端口。为了提高安全性,可以更改为非标准端口:
Port 2222
- 更改后需要在防火墙中放行新端口(见防火墙配置)。
- 默认情况下,SSH 使用 22 端口。为了提高安全性,可以更改为非标准端口:
-
禁止使用 root 用户登录
- 为了提高安全性,建议禁止 root 直接通过 SSH 登录:
PermitRootLogin no
- 此时需要确保至少有一个普通用户具有
sudo
权限。
- 为了提高安全性,建议禁止 root 直接通过 SSH 登录:
-
禁止空密码登录
- 确保不能使用空密码登录:
PermitEmptyPasswords no
- 确保不能使用空密码登录:
-
限制登录用户
- 只允许特定用户通过 SSH 登录:
AllowUsers user1 user2
- 也可以使用
DenyUsers
指令来禁止特定用户。
- 只允许特定用户通过 SSH 登录:
-
启用/禁用密码认证
- 如果你希望仅通过密钥对认证登录,可以禁用密码认证:
PasswordAuthentication no
- 如果你希望仅通过密钥对认证登录,可以禁用密码认证:
-
启用/禁用公钥认证
- 如果要启用公钥认证(推荐),确保以下配置项为
yes
:PubkeyAuthentication yes
- 如果要启用公钥认证(推荐),确保以下配置项为
-
-
保存并退出编辑器
-
重启 SSH 服务
- 在更改配置文件后,需要重启 SSH 服务以使更改生效:
systemctl restart sshd
- 在更改配置文件后,需要重启 SSH 服务以使更改生效:
三、配置 SSH 密钥对认证
SSH 密钥对认证比密码认证更为安全,推荐使用。
-
生成 SSH 密钥对
- 在客户端(你的本地计算机)上生成 SSH 密钥对:
ssh-keygen -t rsa -b 4096
- 按提示设置文件路径和密钥密码(可选)。默认情况下,密钥保存在
~/.ssh/id_rsa
和~/.ssh/id_rsa.pub
。
- 在客户端(你的本地计算机)上生成 SSH 密钥对:
-
将公钥复制到服务器
- 使用
ssh-copy-id
将公钥传输到服务器:ssh-copy-id -i ~/.ssh/id_rsa.pub username@server_ip
- 如果没有
ssh-copy-id
,可以手动复制公钥内容并添加到服务器的~/.ssh/authorized_keys
文件中。
- 使用
-
配置服务器以支持密钥认证
- 确保
/etc/ssh/sshd_config
中已启用以下配置:PubkeyAuthentication yes
- 并确保
~/.ssh/authorized_keys
文件的权限为 600,.ssh
目录的权限为 700。
- 确保
-
测试登录
- 在客户端,使用密钥对登录:
ssh username@server_ip -p 2222
- 如果一切正常,你将不再需要输入密码。
- 在客户端,使用密钥对登录:
四、防火墙配置
- 开放 SSH 服务端口
- 如果更改了 SSH 端口,需要在防火墙中开放新端口:
firewall-cmd --permanent --add-port=2222/tcp firewall-cmd --reload
- 如果未更改端口,确保默认的 22 端口已开放:
firewall-cmd --permanent --add-service=ssh firewall-cmd --reload
- 如果更改了 SSH 端口,需要在防火墙中开放新端口:
五、SELinux 配置(可选)
如果启用了 SELinux,并且更改了 SSH 端口,需要更新 SELinux 配置。
-
添加新的 SSH 端口
semanage port -a -t ssh_port_t -p tcp 2222
-
重启 SSH 服务
systemctl restart sshd
六、日志和故障排查
-
查看 SSH 服务日志
- 如果 SSH 服务遇到问题,可以查看日志来排查:
journalctl -u sshd
- 日志文件通常也位于
/var/log/secure
。
- 如果 SSH 服务遇到问题,可以查看日志来排查:
-
故障排查
- 检查 SSH 配置语法是否正确:
sshd -t
- 如果出现错误,SSH 服务将提示出错的行号和原因。
- 检查 SSH 配置语法是否正确:
七、总结
通过以上步骤,你可以在 CentOS 7 系统上安全地配置 SSH 服务。配置好 SSH 之后,你可以根据需要进一步增强安全性,比如启用双因素认证(2FA),或者设置 IP 限制,确保服务器的安全性和稳定性。定期检查和更新 SSH 配置,可以防范潜在的安全风险。