SSH(Secure Shell)是一种加密的网络协议,常用于远程登录和管理Linux服务器,确保数据传输的安全性,在Linux系统中,打开SSH服务通常包括安装SSH服务端、配置SSH参数、启动服务并设置开机自启等步骤,本文将以主流Linux发行版(如Ubuntu/Debian和CentOS/RHEL)为例,详细说明如何打开SSH服务。

检查系统是否已安装SSH服务
在开始操作前,需先确认系统中是否已安装SSH服务端(通常是openssh-server),不同发行版的检查命令略有不同:
- 
Ubuntu/Debian系统:
使用dpkg命令检查:dpkg -l | grep openssh-server
如果输出包含
openssh-server且状态为ii(表示已安装),则说明已安装;若未安装或状态异常,需执行后续安装步骤。 - 
CentOS/RHEL系统:
使用rpm命令检查:rpm -qa | grep openssh-server
若返回结果为空,则表示未安装,需进行安装。
 
安装SSH服务端
如果系统中未安装SSH服务端,需根据发行版选择对应的包管理器进行安装:
Ubuntu/Debian系统
使用apt包管理器安装,更新软件源后执行安装命令:  
sudo apt update # 更新软件源列表 sudo apt install openssh-server # 安装SSH服务端
安装过程中会提示确认输入Y,完成后服务会自动启动(若未启动,需手动启动,见后续步骤)。
CentOS/RHEL系统
使用yum或dnf包管理器安装(CentOS 7及以下使用yum,CentOS 8及以上使用dnf):  
sudo yum install openssh-server # CentOS 7及以下 # 或 sudo dnf install openssh-server # CentOS 8及以上
安装完成后,同样可通过systemctl命令启动服务。
不同发行版安装命令对比
| 发行版 | 安装命令 | 包管理器 | 
|---|---|---|
| Ubuntu/Debian | sudo apt install openssh-server | 
apt | 
| CentOS 7 | sudo yum install openssh-server | 
yum | 
| CentOS 8+ | sudo dnf install openssh-server | 
dnf | 
配置SSH服务
安装完成后,需根据实际需求修改SSH配置文件(/etc/ssh/sshd_config),以调整安全策略、端口等参数,使用vim或nano编辑器打开文件:  
sudo vim /etc/ssh/sshd_config
以下是常用配置参数及说明:

修改SSH端口(默认为22)
默认端口22易受攻击,建议修改为其他未被占用的端口(如2222):
Port 2222 # 取消注释并修改端口号
禁止root用户直接登录
提升安全性,禁止root通过SSH直接登录,需使用普通用户登录后切换至root:
PermitRootLogin no # 禁止root登录(默认为yes,需修改为no)
配置密码认证或密钥认证
默认支持密码认证,建议同时启用密钥认证(更安全):
PasswordAuthentication yes # 允许密码认证(默认为yes) PubkeyAuthentication yes # 允许密钥认证(默认为yes)
限制登录用户
仅允许特定用户通过SSH登录(如允许用户user1和user2):  
AllowUsers user1 user2
配置文件参数说明
| 参数 | 默认值 | 说明 | 
|---|---|---|
Port | 
22 | SSH监听端口,建议修改为非默认端口 | 
PermitRootLogin | 
yes | 是否允许root用户登录,建议改为no | 
PasswordAuthentication | 
yes | 是否允许密码认证,密钥认证建议保持yes | 
PubkeyAuthentication | 
yes | 是否允许公钥认证,开启后可提升安全性 | 
AllowUsers | 
无 | 限制允许登录的用户,多个用户用空格分隔 | 
修改完成后,保存文件(vim中按Esc输入wq),并重启SSH服务使配置生效:  
sudo systemctl restart sshd # 重启SSH服务 sudo systemctl reload sshd # 或重载配置(不中断连接)
启动SSH服务并设置开机自启
启动SSH服务
使用systemctl命令启动SSH服务:  
sudo systemctl start sshd # 启动SSH服务(CentOS/RHEL) # 或 sudo systemctl start ssh # Ubuntu/Debian中服务名为ssh
设置开机自启
确保SSH服务在系统重启后自动启动:
sudo systemctl enable sshd # CentOS/RHEL # 或 sudo systemctl enable ssh # Ubuntu/Debian
查看服务状态
检查SSH服务是否正常运行:
sudo systemctl status sshd # CentOS/RHEL # 或 sudo systemctl status ssh # Ubuntu/Debian
若输出显示active (running),则表示服务已正常运行。
配置防火墙放行SSH端口
Linux系统默认启用防火墙(如ufw或firewalld),需放行SSH端口(默认22或自定义端口)以允许远程连接:
Ubuntu/Debian(使用ufw)
sudo ufw allow 22 # 放行默认22端口 # 或放行自定义端口(如2222) sudo ufw allow 2222/tcp # 指定协议为tcp sudo ufw enable # 启用防火墙(若未启用)
CentOS/RHEL(使用firewalld)
sudo firewall-cmd --permanent --add-port=22/tcp # 永久放行22端口 # 或放行自定义端口(如2222) sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --reload # 重载防火墙使配置生效
防火墙放行命令对比
| 发行版 | 防火墙工具 | 放行默认端口命令 | 放行自定义端口(如2222) | 
|---|---|---|---|
| Ubuntu/Debian | ufw | sudo ufw allow 22 | 
sudo ufw allow 2222/tcp | 
| CentOS/RHEL | firewalld | sudo firewall-cmd --permanent --add-port=22/tcp | 
sudo firewall-cmd --permanent --add-port=2222/tcp | 
测试SSH连接
配置完成后,可通过另一台设备(如Windows/Linux/macOS)使用SSH客户端连接服务器。
基本连接命令
ssh username@服务器IP地址 -p 端口号
username:服务器上的用户名(如user1);服务器IP地址:服务器的公网IP(如168.1.100);-p 端口号:若使用默认22端口,可省略;若修改过端口(如2222),需指定。
示例:

ssh user1@192.168.1.100 -p 2222
首次连接提示
首次连接时,会提示服务器密钥指纹未知,输入yes确认连接:  
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
连接成功后,输入用户密码即可登录服务器。
密钥认证连接(可选)
为提升安全性,可配置SSH密钥认证(免密登录):
- 
生成密钥对(在客户端执行):
ssh-keygen -t rsa -b 4096 # 生成RSA 4096位密钥对
一路回车使用默认路径(
~/.ssh/id_rsa和~/.ssh/id_rsa.pub)。 - 
上传公钥到服务器:
ssh-copy-id user1@192.168.1.100 -p 2222 # 将公钥上传到服务器
输入用户密码后,公钥会保存到服务器的
~/.ssh/authorized_keys文件中。 - 
免密登录测试:
ssh user1@192.168.1.100 -p 2222 # 无需密码直接登录
 
常见问题排查
若SSH连接失败,可从以下方面排查:
- 检查SSH服务状态:确认服务是否运行(
systemctl status sshd); - 检查防火墙设置:确保防火墙已放行SSH端口;
 - 检查端口占用:使用
netstat -tuln | grep 端口号确认端口是否被占用; - 检查配置文件语法:使用
sshd -t测试配置文件是否有误; - 查看日志:通过
/var/log/auth.log(Ubuntu)或/var/log/secure(CentOS)查看连接失败原因。 
相关问答FAQs
Q1:SSH连接时提示“Connection refused”怎么办?
A:“Connection refused”通常表示SSH服务未启动或端口未开放,可按以下步骤排查:  
- 检查SSH服务状态:
sudo systemctl status sshd,若未运行则执行sudo systemctl start sshd; - 检查端口是否正确:确认
/etc/ssh/sshd_config中的Port设置与连接命令中的端口一致; - 检查防火墙:确保防火墙已放行对应端口(如
ufw allow 22或firewall-cmd --add-port=22/tcp); - 检查端口占用:使用
netstat -tuln | grep 22确认端口是否被其他服务占用。 
Q2:如何禁止root用户通过SSH登录?
A:禁止root登录可提升服务器安全性,操作步骤如下:  
- 编辑SSH配置文件:
sudo vim /etc/ssh/sshd_config; - 找到
PermitRootLogin参数,将其值修改为no(默认为yes); - 保存文件并重启SSH服务:
sudo systemctl restart sshd; - 测试:使用root用户尝试SSH连接,若提示“Permission denied”则表示配置成功,此后需通过普通用户登录后切换至root(
su -或sudo -i)。 
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/26972.html