在Linux系统中搭建SSH(Secure Shell)服务是实现远程安全管理的核心操作,SSH通过加密传输和身份验证机制,确保用户在远程登录、文件传输等操作中的数据安全,本文将以主流Linux发行版(如Ubuntu/Debian和CentOS/RHEL)为例,详细讲解SSH服务的完整搭建流程,包括安装、配置、启动、防火墙设置及客户端连接测试,并附上安全加固建议。
SSH服务安装
不同Linux发行版的软件包管理工具不同,需根据系统选择对应的安装命令,以下是常见发行版的安装步骤:
Ubuntu/Debian系统
Ubuntu/Debian系列使用apt
包管理器,执行以下命令安装SSH服务(默认为OpenSSH):
sudo apt update # 更新软件包列表 sudo apt install openssh-server # 安装OpenSSH服务器
安装完成后,可通过systemctl status ssh
查看服务状态(若未启动,需手动执行sudo systemctl start ssh
)。
CentOS/RHEL系统
CentOS/RHEL系列使用yum
或dnf
包管理器(CentOS 7及以后版本推荐dnf
):
sudo yum install openssh-server # CentOS 7及以前版本 # 或 sudo dnf install openssh-server # CentOS 8及以后版本
安装后同样可通过systemctl status sshd
查看服务状态(CentOS系列服务名为sshd
)。
不同发行版安装命令对比
发行版系列 | 包管理器 | 安装命令 | 服务名称 |
---|---|---|---|
Ubuntu/Debian | apt | sudo apt install openssh-server |
ssh |
CentOS/RHEL | yum/dnf | sudo yum/dnf install openssh-server |
sshd |
SSH服务配置
SSH服务的核心配置文件为/etc/ssh/sshd_config
(Ubuntu/Debian)或/etc/ssh/sshd_config
(CentOS/RHEL),通过修改该文件可实现端口自定义、登录限制等功能,配置前建议备份原文件:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
关键配置项说明
配置项 | 默认值 | 说明 | 推荐设置 |
---|---|---|---|
Port | 22 | SSH服务监听端口 | 修改为非默认端口(如2222) |
PermitRootLogin | yes | 是否允许root用户直接登录 | no(禁止root直接登录,提升安全性) |
PasswordAuthentication | yes | 是否允许密码认证 | no(仅密钥认证,更安全) |
PubkeyAuthentication | yes | 是否允许公钥认证 | yes(结合密码认证或单独使用) |
AllowUsers | 无 | 允许登录的用户列表(多个用户用空格分隔) | AllowUsers user1 user2 |
MaxAuthTries | 6 | 最大认证尝试次数 | 3(防止暴力破解) |
配置示例
使用vim
或nano
编辑配置文件:
sudo vim /etc/ssh/sshd_config
Port 2222 # 修改端口 PermitRootLogin no # 禁止root直接登录 PasswordAuthentication no # 禁止密码认证,仅用密钥 AllowUsers admin test # 仅允许admin和test用户登录 MaxAuthTries 3 # 最大认证尝试3次
保存后执行sudo systemctl restart ssh
(Ubuntu)或sudo systemctl restart sshd
(CentOS)使配置生效。
防火墙设置
SSH服务默认端口(22)或自定义端口需通过防火墙开放,否则客户端无法连接,不同发行版防火墙工具不同:
Ubuntu/Debian(UFW防火墙)
sudo ufw allow 2222/tcp # 开放自定义端口2222 sudo ufw enable # 启用防火墙(若未启用)
CentOS/RHEL(Firewalld防火墙)
sudo firewall-cmd --permanent --add-port=2222/tcp # 永久开放端口2222 sudo firewall-cmd --reload # 重新加载防火墙规则
防火墙命令对比
发行版系列 | 防火墙工具 | 开放端口命令 | 启用防火墙命令 |
---|---|---|---|
Ubuntu/Debian | UFW | sudo ufw allow 端口/tcp |
sudo ufw enable |
CentOS/RHEL | Firewalld | sudo firewall-cmd --permanent --add-port=端口/tcp |
sudo systemctl start firewalld |
SSH客户端连接测试
基本连接
使用ssh
命令连接服务器,格式为ssh -p 端口 用户名@服务器IP
:
ssh -p 2222 admin@192.168.1.100
首次连接会提示“Are you sure you want to continue connecting? (yes/no)”,输入yes
即可。
密钥认证配置(推荐)
为提升安全性,建议使用SSH密钥对替代密码认证:
- 生成密钥对(在客户端执行):
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
按提示保存密钥(默认
~/.ssh/id_rsa
),无需设置密码或直接设置密码保护私钥。 - 上传公钥到服务器:
ssh-copy-id -p 2222 admin@192.168.1.100
执行后输入服务器用户密码,公钥将自动添加到服务器的
~/.ssh/authorized_keys
文件中。 - 测试免密登录:
ssh -p 2222 admin@192.168.1.100
若无需输入密码即可登录,说明密钥认证配置成功。
安全加固建议
- 修改默认端口:避免使用默认端口22,降低自动化攻击风险。
- 禁用root直接登录:通过普通用户登录后切换至root(
sudo su -
),减少权限泄露风险。 - 使用密钥认证:关闭密码认证(
PasswordAuthentication no
),强制使用密钥对。 - 限制登录用户:通过
AllowUsers
或DenyUsers
配置项,仅允许特定用户登录。 - 定期更新SSH软件包:执行
sudo apt upgrade
(Ubuntu)或sudo yum update
(CentOS),修复安全漏洞。 - 配置失败登录限制:通过
MaxAuthTries
限制认证次数,或使用fail2ban
工具封禁恶意IP。
相关问答FAQs
Q1: SSH连接时提示“Connection timed out”怎么办?
A: 可能原因及解决方法:
(1)SSH服务未启动:执行sudo systemctl start ssh
(Ubuntu)或sudo systemctl start sshd
(CentOS);
(2)防火墙拦截:检查防火墙规则,确保SSH端口已开放(如sudo ufw status
或sudo firewall-cmd --list-ports
);
(3)服务器IP或端口错误:确认客户端输入的IP地址和端口与服务器配置一致;
(4)网络问题:使用ping
命令测试服务器网络连通性(如ping 192.168.1.100
)。
Q2: 如何修改SSH默认端口并确保连接正常?
A: 修改步骤如下:
(1)编辑SSH配置文件:sudo vim /etc/ssh/sshd_config
,将Port 22
改为自定义端口(如Port 2222
);
(2)开放防火墙端口:Ubuntu执行sudo ufw allow 2222/tcp
,CentOS执行sudo firewall-cmd --permanent --add-port=2222/tcp && sudo firewall-cmd --reload
;
(3)重启SSH服务:sudo systemctl restart ssh
(Ubuntu)或sudo systemctl restart sshd
(CentOS);
(4)客户端连接测试:使用ssh -p 2222 username@IP
连接,若成功则说明修改成功。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/31126.html